我有一个常见的登录和注销屏幕。当我在登录后退出...我来登录页面。弹出安全性的默认行为在注销时使会话无效,因此如果我尝试使用同一屏幕登录,则会被重定向到主页,因为此时没有可用的会话。所需行为应该能够在注销后立即登录,这不会因会话失效而发生
<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
用于登录和注销
我该如何处理这个问题?
答案 0 :(得分:0)
我认为这是“现在”的解决方案。
你可以:
在您的web.xml中声明您自己的HttpSessionEventPublisher
:
<listener>
<listener-class>org.yourcompany.MyHttpSessionEventPublisher</listener-class>
</listener>
在HttpSessionEventPublisher
抓住HttpSessionDestroyedEvent
并且不允许弹簧使看到无效。
我不确定这是否是“正确的”解决方案,但它应该有效。
答案 1 :(得分:0)
我设法使用invalidate-session="false"