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

Posted

技术标签:

【中文标题】Spring Security:成功注销时重定向到 invalid-session-url 而不是 logout-success-url【英文标题】:Spring Security: Redirect to invalid-session-url instead of logout-success-url on successful logout 【发布时间】:2011-02-05 18:12:54 【问题描述】:

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

非常感谢。

【问题讨论】:

我也有同样的问题。你解决了吗? 【参考方案1】:

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

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

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

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

【讨论】:

invalidate-session="true":使用invalid-session-urlinvalidate-session="false":使用注销成功处理程序 url。见:Christopher's answer【参考方案2】:

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

<sec:logout logout-success-url="/logout" invalidate-session="false" 
delete-cookies="JSESSIONID" />

【讨论】:

那我们怎么invalidatesession 添加delete-cookies="JSESSIONID" 就足够了 有趣的是,在我的本地它可以与invalidate-session="true" 一起使用,但在部署到产品服务器时却不能,这就是我感到困惑的原因。无论如何,这个解决方案现在适用于两者。

以上是关于Spring Security:成功注销时重定向到 invalid-session-url 而不是 logout-success-url的主要内容,如果未能解决你的问题,请参考以下文章

防止 Spring Security 在登录/注销后进行 302 重定向

Spring Security SAML,使用 SAMLContextProviderLB 设置为 HTTPs 方案时重定向到 HTTP 而不是 HTTPS

Spring Security 在新的应用程序启动时重定向到 invalid-session-url

Spring security - 禁用注销重定向

Spring security:注销时始终重定向到 invalid-session-url

使用 Spring Security 和 Grails 注销后如何将用户重定向到不同的页面