Java 页面刷新后,Spring并发会话控制错误消失
我的流程:Java 页面刷新后,Spring并发会话控制错误消失,java,spring,spring-security,Java,Spring,Spring Security,我的流程: 在browser1中为User1启动会话(会话1) 以用户1身份登录browser2(会话2) 在browser1中刷新页面-显示错误: '此会话已过期(可能是由于作为同一用户尝试多个并发登录) 再次刷新browser1中的页面-成功恢复旧会话 我怎样才能在第1课时结束 我的spring配置: <session-management session-fixation-protection="migrateSession"> <concurrency-cont
<session-management session-fixation-protection="migrateSession">
<concurrency-control max-sessions="1" error-if-maximum-exceeded="false"/>
</session-management>
(另一个解决方法)您还必须使用“记住我”身份验证,这就是您的第一个浏览器重新登录的方式。如果您希望它能正常工作,请不要使用
记住我
(另一种解决方法)您还必须使用记住我身份验证,这就是您的第一个浏览器重新登录的方式。如果您希望它正常工作,请不要使用记住我
它使用记住我登录来再次登录您。您可以将过期会话重定向到另一个url,如下所示,并手动使当前会话过期
在安全配置中:
(只需添加过期的url属性)
在fwd api/url中:
这就是我所做的,它工作得非常好。它使用记住我登录来再次登录您。您可以将过期的会话重定向到另一个url,如下所示,并手动使当前会话过期 在安全配置中: (只需添加过期的url属性) 在fwd api/url中:
这就是我所做的,效果非常好。5。browser2中的刷新页面-您将看到显示错误:“此会话已过期”这就是它的工作方式,如果超过最大值,则查看替代解决方案将
错误设置为true
,并且在browser1中的会话过期之前,您将无法登录browser2。但是如果我想允许再次登录,但是破坏以前的登录会话吗?有可能吗?有可能,事实上这正是发生的事情-当你这样做4时,一个新的会话将在browser1中创建。是的,但事实上它没有被破坏,因为你可以刷新页面,会话将被恢复,不适合meSession的将不会恢复,新的会话将被创建。这与上面描述的场景相同:在2中。当您登录browser2并创建session2时,session1被标记为过期。然后,当您再次登录到browser1时,您将获得有关无效(已过期)会话的信息,但在刷新browser1之后,会话2将标记为已过期,并且将在browser1中创建会话3。你可以重复这个过程,这就是它的工作原理。browser2中的刷新页面-您将看到显示错误:“此会话已过期”这就是它的工作方式,如果超过最大值,则查看替代解决方案将错误设置为true
,并且在browser1中的会话过期之前,您将无法登录browser2。但是如果我想允许再次登录,但是破坏以前的登录会话吗?有可能吗?有可能,事实上这正是发生的事情-当你这样做4时,一个新的会话将在browser1中创建。是的,但事实上它没有被破坏,因为你可以刷新页面,会话将被恢复,不适合meSession的将不会恢复,新的会话将被创建。这与上面描述的场景相同:在2中。当您登录browser2并创建session2时,session1被标记为过期。然后,当您再次登录到browser1时,您将获得有关无效(已过期)会话的信息,但在刷新browser1之后,会话2将标记为已过期,并且将在browser1中创建会话3。你可以重复这个过程,这就是它的工作原理。
.sessionManagement().sessionAuthenticationStrategy(concurrentSessionControlStrategy)
.maximumSessions(1).maxSessionsPreventsLogin(false).expiredUrl("/users/expire-me")
@RequestMapping(value="expire-me", method=RequestMethod.GET)
@ResponseBody
public void expireSession(HttpServletRequest request,HttpServletResponse response) throws IOException {
request.getSession(false).invalidate();
}