为什么在Spring Security注销后会出现无效的会话重定向?

时间:2012-07-19 10:06:49

标签: spring spring-security

我有一个使用Spring Security的Spring MVC项目。我想知道j_spring_security_logout是如何运作的。我在这样的视图中定义了一个注销链接:

<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

2 个答案:

答案 0 :(得分:1)

Spring Security reference manual中解释了这一点。

除非在您注销时删除会话cookie,否则您无法真正使用会话到期工具。

答案 1 :(得分:0)

只使用这个,它应该有效(没有logout-url):

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

我认为您可能会因使用注销和会话管理无效的会话网址而遇到问题,因为一旦您注销了会话,就不再有效了。

根据您的其他问题更新,具体如何:

<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,只是在本地尝试,当您注销会话无效时,您将被重定向到invalid-session-url配置中指定的session-management位置。

现在对解决方案非常感兴趣。