2014-10-28 187 views
0

我正在使用Java EE表单登录,并且当我第一次登录时,我的url类似于: http://localhost:8080/mysite并且能够正常登录。登录和注销jsf

,当我在这里注销是代码:

public String logout() { 
    FacesContext facesContext = FacesContext.getCurrentInstance(); 
    ExternalContext externalContext = facesContext.getExternalContext(); 
    externalContext.invalidateSession(); 
    return "/login.xhtml?faces-redirect=true"; 
} 

,这是在浏览器上显示的内容: http://localhost:8080/mysite/faces/login.xhtml

从这里,如果我尝试再次登录时,我得到HTTP 404与这就是URL的样子: http://localhost:8080/mysite/faces/j_security_check

这里是web.xml中

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

<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>/faces/*</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.jsf</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.faces</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.xhtml</url-pattern> 
</servlet-mapping> 

只看模式,有没有办法删除/ faces /部分的url,或者我怎样才能做注销时使用表单身份验证?

+0

您将'Faces Servlet'映射到web.xml中的什么URL模式? – Tiny 2014-10-29 08:57:00

+0

嗨,thnx ...我用url模式映射编辑...此刻,我有点这样做:externalContext.redirect(“/ sisk”);而不是使用动作导航 – Mosd 2014-10-29 09:16:00

+1

XML中的第一个映射是不是无用的(URL模式为'/faces/*'的映射)?此外,您应该能够在单个''标签内像多个''一样组合标签,如 Faces Servlet * .xhtml * .jsf * .faces'而不是为每个模式重复它们。 – Tiny 2014-10-29 09:28:46

回答

1

通常,JSF servlet被映射为服务单个url模式。您可以将其映射到多个网址格式,但前提是您需要它。拥有多个映射可能会导致必须将物理文件名转换为JSF页面名称的导航处理程序混淆。

看起来您使用.xhtml来引用您的JSF页面。在这种情况下,删除其他JSF servlet映射:

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

<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>*.xhtml</url-pattern> 
</servlet-mapping> 
+0

thanx的家伙,我结束了删除其他映射,只留下* .xhtml之一,我让他们因为它只是从以前的项目复制和粘贴...它只是帮助我缩小问题... ... – Mosd 2014-11-06 09:17:58