页面刷新后,Spring并发会话控制错误消失

时间:2013-02-06 22:42:29

标签: java spring spring-security

我的流程:

  1. 在browser1(session1)
  2. 中为User1启动会话
  3. 在browser2(session2)中以User1身份登录
  4. 在浏览器1中刷新页面 - 显示错误: '此会话已过期(可能是由于同一用户尝试了多个并发登录)
  5. 再次刷新浏览器1中的页面 - 旧会话已成功恢复
  6. 我怎么能超过session1?

    我的春季配置:

    <session-management session-fixation-protection="migrateSession">
        <concurrency-control max-sessions="1" error-if-maximum-exceeded="false"/>
    </session-management>
    

2 个答案:

答案 0 :(得分:2)

它使用它做什么记住我登录再次登录你。你可以将你过期的会话重定向到另一个URL,如下所示,并手动使当前会话到期

在安全配置中:

(只添加过期的url属性)

.sessionManagement().sessionAuthenticationStrategy(concurrentSessionControlStrategy)
   .maximumSessions(1).maxSessionsPreventsLogin(false).expiredUrl("/users/expire-me")

在fwd api / url中:

@RequestMapping(value="expire-me", method=RequestMethod.GET)
@ResponseBody
public void expireSession(HttpServletRequest request,HttpServletResponse response) throws IOException {
    request.getSession(false).invalidate();
}

这就是我所做的,它完美无缺。

答案 1 :(得分:1)

(另一种解决方法)你必须使用记住我的身份验证,这就是你的第一个浏览器重新登录的方式。如果您希望它正常工作,请不要使用remember-me