0

我的流程:

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

我怎样才能结束 session1?

我的弹簧配置:

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

2 回答 2

2

它的作用是记住我登录以再次登录您。您可以将过期的会话重定向到另一个网址,如下所示,并手动使当前会话过期

在安全配置中:

(只需添加过期的 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();
}

这就是我所做的,它工作得很好。

于 2015-06-02T14:13:41.473 回答
1

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

于 2014-11-14T08:38:47.783 回答