2012-07-19 52 views
0

我有一個使用Spring Security的Spring MVC項目。我想知道j_spring_security_logout是如何工作的。我有一個觀點這樣定義的註銷鏈接:爲什麼在Spring安全註銷後出現無效會話重定向?

<a href="<c:url value="/j_spring_security_logout" />">Logout</a> 

在我spring-security.xml我已經定義了這一點:

<form-login login-page="/login" default-target-url="/wellcome" authentication-failure-url="/loginfailed" /> 
<logout logout-success-url="/logout" logout-url="/j_spring_security_logout" /> 
<session-management invalid-session-url="/invalidsession" /> 

我預計,點擊退出應該我重定向到/logout,而是我重定向到invalid-session-url,即/invalidsessionlogout-success-url被忽略。

但是,當我刪除session-management時,註銷確實會將我重定向到/logout

回答

0

使用僅這一項,它應該工作(不logout-url):

<logout logout-success-url="/logout" /> 

我想你可以同時使用註銷和會話管理無效的會話URL遇到問題,因爲一旦你退出你的會話不再有效。按您的附加問題

更新,這個怎麼樣:

<security:logout logout-success-url="/logout?displayLogout=1" /> 
<security:session-management invalid-session-url="/logout?displayLogout=0" /> 

然後在您的視圖:

<c:if test="${param.displayLogout == 0}"> 
    <h2>Your session has timed out.</h2> 
</c:if> 

更新#2,剛剛試了一下本地,用戶註銷時的會話是無效的,你會得到重定向到您在session-management配置中指定invalid-session-url位置。

現在對解決方案真的很感興趣。

+0

沒有'logout-url'結果仍然是一樣的。根據你的第二句話:我可以通過哪種方式向用戶通知沒有'session-management'的過期會話? – woyaru 2012-07-19 10:19:35

+0

@woyaru請參閱更新 – ant 2012-07-19 10:27:24

+0

謝謝,但通過這種方式也在註銷後用戶將看到消息:'您的會話已超時.'。我想區分會話何時到期並註銷操作。 – woyaru 2012-07-19 11:14:22