【问题标题】:Spring Security: Redirect to invalid-session-url instead of logout-success-url on successful logoutSpring Security:成功注销时重定向到 invalid-session-url 而不是 logout-success-url
【发布时间】: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>

非常感谢。

【问题讨论】:

  • 我也有同样的问题。你解决了吗?

标签: spring spring-security logout session-management


【解决方案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" 一起使用,但在部署到产品服务器时却不能,这就是我感到困惑的原因。无论如何,这个解决方案现在适用于两者。
猜你喜欢
  • 2017-07-13
  • 2020-06-18
  • 2012-05-16
  • 2014-02-20
  • 2022-11-17
  • 2015-05-07
  • 1970-01-01
  • 2019-05-09
  • 1970-01-01
相关资源
最近更新 更多