0

我正在开发一个 jpa、jsf、jaas 应用程序,现在我遇到了这个问题:

我的 web.xml 中有这个安全约束

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Private</web-resource-name>
            <url-pattern>/*</url-pattern>
                <http-method>GET</http-method>
                <http-method>POST</http-method>
    </web-resource-collection>          
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
    <form-login-config>
        <form-login-page>/login.xhtml</form-login-page>
        <form-error-page>/badLogin.xhtml</form-error-page>
    </form-login-config>
</login-config>

所以每次应用程序启动时,用户都会被引导到登录页面,但是页面会显示,但它没有通过 faces servlet,因此不会渲染 faces 组件。这是我的 Faces Servlet 映射

 <servlet>
  <servlet-name>Faces Servlet</servlet-name>
   <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
     <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>

怎么了?

4

1 回答 1

3

只需确保请求 URL 与 faces servlet 的 URL 模式匹配。

使用当前设置,您有 2 个选项:

  1. 要么改变

    <form-login-page>/login.xhtml</form-login-page>
    <form-error-page>/badLogin.xhtml</form-error-page>
    

    经过

    <form-login-page>/login.jsf</form-login-page>
    <form-error-page>/badLogin.jsf</form-error-page>
    

    以便它匹配 faces servlet 的 URL 模式。


  2. 或者,改变

    <url-pattern>*.jsf</url-pattern>
    

    经过

    <url-pattern>*.xhtml</url-pattern>
    

    这样您就无需摆弄虚拟 URL。

于 2013-02-18T13:37:44.443 回答