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-url
。 invalidate-session="false"
:使用注销成功处理程序 url。见:Christopher's answer【参考方案2】:
默认情况下,注销过程会首先使会话失效,从而触发会话管理重定向到无效会话页面。通过指定 invalidate-session="false" 将修复此行为。
<sec:logout logout-success-url="/logout" invalidate-session="false"
delete-cookies="JSESSIONID" />
【讨论】:
那我们怎么invalidate
session
。
添加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