注销后立即登录会导致重定向到主页

时间:2011-06-10 20:04:16

标签: spring spring-security

我有一个常见的登录和注销屏幕。当我在登录后退出...我来登录页面。弹出安全性的默认行为在注销时使会话无效,因此如果我尝试使用同一屏幕登录,则会被重定向到主页,因为此时没有可用的会话。所需行为应该能够在注销后立即登录,这不会因会话失效而发生

<http use-expressions="true" access-denied-page="/access-denied">
    <intercept-url pattern="/secured/user/sign-up" access="hasAnyRole('ROLE_USER','ROLE_ANONYMOUS')" />
    <intercept-url pattern="/secured/user/sign-in" access="hasRole('ROLE_ANONYMOUS')" />
    <intercept-url pattern="/secured/**" requires-channel="https" />
    <intercept-url pattern="/user/dashboard/**" access="hasAnyRole('ROLE_IC')" />
    <intercept-url pattern="/**" access="permitAll"
        requires-channel="http" />
    <form-login login-page="/secured/user/sign-in" 
        authentication-success-handler-ref="authenticationSuccessHandler"
        authentication-failure-url="/secured/user/sign-in" />
    <logout logout-success-url="/secured/user/sign-in?loggedout=true"
        logout-url="/secured/logout"/>
    <security:session-management
        session-fixation-protection="none">
    </security:session-management>
</http>

如果您引用xml,则会看到/secured/user/sign-in用于登录和注销

我该如何处理这个问题?

2 个答案:

答案 0 :(得分:0)

我认为这是“现在”的解决方案。

你可以:

  1. 在您的web.xml中声明您自己的HttpSessionEventPublisher

    <listener>
        <listener-class>org.yourcompany.MyHttpSessionEventPublisher</listener-class>
    </listener>
    
  2. HttpSessionEventPublisher抓住HttpSessionDestroyedEvent并且不允许弹簧使看到无效。

  3. 我不确定这是否是“正确的”解决方案,但它应该有效。

答案 1 :(得分:0)

我设法使用invalidate-session="false"

解决了这个问题