0

我有一个使用 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,即/invalidsession。被logout-success-url忽略。

但是,当我删除时session-management,注销确实会将我重定向到/logout.

4

2 回答 2

1

这在Spring Security 参考手册中有解释。

除非在您注销时删除会话 cookie,否则您不能真正使用会话到期功能。

于 2012-07-19T16:29:54.337 回答
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,只是在本地尝试过,当您注销时您的会话无效并且您被重定向到您在配置invalid-session-url中指定的位置。session-management

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

于 2012-07-19T10:14:57.330 回答