15

我已经使用 Spring Security 3.0.2 实现了一个登录注销系统,一切都很好,但是对于这一点:在我添加了一个带有 invalid-session-url 属性的会话管理标签后,在注销时 Spring 总是会重定向我无效的-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>

非常感谢。

4

2 回答 2

8

默认情况下,注销过程会首先使会话失效,从而触发会话管理重定向到无效会话页面。通过指定 invalidate-session="false" 将修复此行为。

<sec:logout logout-success-url="/logout" invalidate-session="false" 
delete-cookies="JSESSIONID" />
于 2013-01-03T00:51:16.730 回答
4

不要将注销标签中的 logout-url 属性与invalid-session-url会话管理中的属性混淆。

后者是执行注销操作的 URL,而前者是在注销操作时被转发到的 URL。

换句话说,在创建注销按钮时,该按钮的 URL 就是logout-url值。现在,当注销完成后,spring security 默认会渲染主应用程序的根应用程序路径,即:http://yourserver:yourport/yourwebapp/. 此路径被 覆盖invalid-session-url。因此,在注销时,您将被转发到那里。

总而言之,如果你不想要你要求的行为,那么不要使用invalid-session-url属性。希望有帮助。

于 2010-07-16T19:05:08.277 回答