我使用的是Spring Security 3,而我的ApplicationContext-Security.xml指定了
<form-login login-page="/genesis" default-target-url="/diagnostics/start-diagnostics"
authentication-failure-url="/genesis?authfailed=true"
authentication-success-handler-ref="customTargetUrlResolver"/>
<access-denied-handler error-page="/genesis?notauthorized=true"/>
<logout logout-success-url="/genesis"/>
<session-management session-authentication-error-url="/genesis">
<concurrency-control max-sessions="1"/>
</session-management>
然而,当我在第二个浏览器中登录我的应用程序,然后在我尝试做任何事情时返回到我的第一个浏览器,我得到一个纯白色屏幕,显示消息“此会话已过期(可能是由于多个并发登录尝试作为同一用户“
如何配置Spring Security 3以显示我自己的“您已断开连接”的URL?
答案 0 :(得分:7)
你可以:
<form-login>
处理),这些情况描述为here in Spring Security manual:
<concurrency-control>
属性
error-if-maximum-exceeded
如果设置为“true”,则会在以下时引发SessionAuthenticationException 用户尝试超过允许的最大会话数。该 默认行为是使原始会话失效。
expired-url
如果用户尝试使用会话,则会将其重定向到的URL 已被并发会话控制器“过期”,因为 用户已超过允许的会话数并已登录 在其他地方。除非异常超出最大值,否则应设置 组。如果未提供任何值,则只会写入到期消息 直接回到答复。
另请查看ConcurrentSessionFilter和ConcurrentSessionControlStrategy了解详情。
回答您的问题:在您的配置中,您应该有以下内容:
<session-management session-authentication-error-url="/genesis">
<concurrency-control max-sessions="1" expired-url="/sessionExpired.jsp" />
</session-management>
请注意,expired-url
与session-authentication-error-url
不同。