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

use*_*087 2 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>
Run Code Online (Sandbox Code Playgroud)

然而,当我登录到我的第二个浏览器的应用程序,然后当我尝试做任何事情,我得到一个纯白色的屏幕与消息"此会议已过期(可能由于正在尝试多种并发登录回到我的第一个浏览器作为同一个用户"

如何配置Spring Security 3以显示我自己的"您已断开连接"的URL?

Xae*_*ess 7

你可以:

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

Spring Security手册中描述这些情况:

<concurrency-control> 属性

error-if-maximum-exceeded

如果设置为"true",则当用户尝试超过允许的最大会话数时,将引发SessionAuthenticationException.默认行为是使原始会话到期.

expired-url

如果用户尝试使用并发会话控制器已"过期"的会话,则用户将被重定向到该URL,因为用户已超过允许的会话数并已在其他位置再次登录.应设置,除非设置了exception-if-maximum-exceeded.如果没有提供任何值,则只会将到期消息直接写回响应.

另请参阅ConcurrentSessionFilterConcurrentSessionControlStrategy以获取更多详细信息.


回答你的问题:在你的配置中你应该有这样的东西:

<session-management session-authentication-error-url="/genesis"> 
    <concurrency-control max-sessions="1" expired-url="/sessionExpired.jsp" />
</session-management>
Run Code Online (Sandbox Code Playgroud)

注意与... expired-url不一样session-authentication-error-url.