Spring Security:成功注销后重定向到invalid-session-url而不是logout-success-url

时间:2010-04-08 15:06:39

标签: spring spring-security logout session-management

我已经使用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>

非常感谢。

2 个答案:

答案 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属性。 希望有所帮助。