Страница приветствия отображается без перенаправления на страницу входа - PullRequest
4 голосов
/ 24 февраля 2012

У меня есть следующий файл web.xml. Я сохранил страницу приветствия для проверки безопасности, чтобы она перенаправляла на страницу входа, но страница приветствия отображается без входа пользователя. Это правильный путь? enter image description here

<welcome-file-list>
        <welcome-file>/GISPages/welcome.xhtml</welcome-file> 
    </welcome-file-list>

    <resource-ref>
        <res-ref-name>jdbc/Gis_WebApp</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>


    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Protected Pages</web-resource-name>
            <url-pattern>/GISPages/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>registereduser</role-name>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>

    <login-config>
        <auth-method>FORM</auth-method>
        <realm-name>Live</realm-name>
        <form-login-config>
            <form-login-page>/login.xhtml</form-login-page>
            <form-error-page>/noauth.xhtml</form-error-page>
        </form-login-config>
    </login-config>

    <security-role>
        <role-name>registereduser</role-name>
    </security-role>

    <security-role>
        <role-name>admin</role-name>
    </security-role> 

1 Ответ

1 голос
/ 19 июля 2012

Ограничения безопасности защищают шаблон URL, но в этом случае из-за настройки файла приветствия ваш URL по умолчанию изменится на что-то вроде http://:port/webcontext/, и будет отображаться welcome.xhtml. Принимая во внимание, что в соответствии с определенным шаблоном URL защищенный URL должен иметь URL-адрес типа http://:port/webcontext/GISPages/welcome.xhtml Поскольку шаблон URL не совпадает с сервером приложений, просмотрите содержимое страницы.

Единственное решение, которое сработало для меня, это проверить UserPrincipal в событии prerender

<f:event type="preRenderComponent"
listener="#{bean.forwardToLoginIfNotLoggedIn}" /> 

и перенаправить на login.xhtml, если UserPrincipal возвращает ноль.

Извинения за открытие старой темы. Недавно я столкнулся с подобной проблемой, поэтому подумал, что это может быть полезно для некоторых.

...