如何在发生会话失效时配置自定义URL

时间:2012-06-18 09:58:46

标签: spring-security

我使用的是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?

1 个答案:

答案 0 :(得分:7)

你可以:

  • 强制并发过滤器抛出身份验证异常(它将由<form-login>处理),
  • 提供您自己的会话过期页面。

这些情况描述为here in Spring Security manual

  

<concurrency-control>属性

     

error-if-maximum-exceeded

     

如果设置为“true”,则会在以下时引发SessionAuthenticationException   用户尝试超过允许的最大会话数。该   默认行为是使原始会话失效。

     

expired-url

     

如果用户尝试使用会话,则会将其重定向到的URL   已被并发会话控制器“过期”,因为   用户已超过允许的会话数并已登录   在其他地方。除非异常超出最大值,否则应设置   组。如果未提供任何值,则只会写入到期消息   直接回到答复。

另请查看ConcurrentSessionFilterConcurrentSessionControlStrategy了解详情。


回答您的问题:在您的配置中,您应该有以下内容:

<session-management session-authentication-error-url="/genesis"> 
    <concurrency-control max-sessions="1" expired-url="/sessionExpired.jsp" />
</session-management>

请注意,expired-urlsession-authentication-error-url不同。