Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 页面刷新后,Spring并发会话控制错误消失_Java_Spring_Spring Security - Fatal编程技术网

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

我的流程:

  • 在browser1中为User1启动会话(会话1)
  • 以用户1身份登录browser2(会话2)
  • 在browser1中刷新页面-显示错误: '此会话已过期(可能是由于作为同一用户尝试多个并发登录)
  • 再次刷新browser1中的页面-成功恢复旧会话
  • 我怎样才能在第1课时结束

    我的spring配置:

    <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();
    }