2014-10-28 255 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