我已经使用Spring Security 3.0.2实现了一个登录注销系统,一切都很好但是对于这一件事:在我添加了一个带有invalid-session-url属性的会话管理标签后,在注销时Spring总是会重定向我在invalid-session-url而不是logout-success-url(之前它正确地做过)。
有没有办法避免这种行为?
这是我的配置:
<http use-expressions="true" auto-config="true">
[...some intercept-url's...]
<form-login login-page="/login" authentication-failure-url="/login?error=true"
login-processing-url="/login-submit" default-target-url="/home"
always-use-default-target="true" />
<logout logout-success-url="/home?logout=true" logout-url="/login-logout" />
<session-management invalid-session-url="/home?invalid=true" />
</http>
非常感谢。
答案 0 :(得分:6)
默认情况下,注销过程将首先使会话无效,从而触发会话管理重定向到无效会话页面。通过指定invalidate-session =“false”将解决此问题。
<sec:logout logout-success-url="/logout" invalidate-session="false"
delete-cookies="JSESSIONID" />
答案 1 :(得分:3)
请勿将logout标记中的logout-url属性与会话管理中的invalid-session-url
属性混淆。
后者是执行注销操作的URL,而前者是在注销操作时转发的URL。
换句话说,在创建注销按钮时,该按钮的URL将是logout-url
值。
现在当注销完成时,spring security是默认的,它将呈现主应用程序的根应用程序路径,即:http://yourserver:yourport/yourwebapp/
。此路径被invalid-session-url
覆盖。因此,在注销时,您将被转发到那里。
总而言之,如果您不想要您要求的行为,请不要使用invalid-session-url
属性。
希望有所帮助。