Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.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 如何为特权用户提供无限制的会话,并将其他用户限制为仅并发一个会话,以及注销所有其他登录?_Java_Spring_Session_Spring Security_Spring Session - Fatal编程技术网

Java 如何为特权用户提供无限制的会话,并将其他用户限制为仅并发一个会话,以及注销所有其他登录?

Java 如何为特权用户提供无限制的会话,并将其他用户限制为仅并发一个会话,以及注销所有其他登录?,java,spring,session,spring-security,spring-session,Java,Spring,Session,Spring Security,Spring Session,我有一个要求,某些特权用户应该被允许拥有无限数量的会话,而所有其他用户应该被限制为同时只有一个会话 在Spring Security中,我扩展了ConcurrentSessionControlAuthenticationStrategy类,并覆盖了该用户在每次登录Spring Security之前调用的方法GetMaximumSessions,如下所示: @Override protected int getMaximumSessionsForThisUser(Authenticatio

我有一个要求,某些特权用户应该被允许拥有无限数量的会话,而所有其他用户应该被限制为同时只有一个会话

在Spring Security中,我扩展了ConcurrentSessionControlAuthenticationStrategy类,并覆盖了该用户在每次登录Spring Security之前调用的方法
GetMaximumSessions
,如下所示:

@Override
    protected int getMaximumSessionsForThisUser(Authentication authentication) {
        List<String> privilegedUsers = userRepo.findAllByIsPrivileged();
        return privilegedUsers.contains(authentication.getName()) ? -1 : 1;
    }
@Bean
    public SessionRegistry getSessionRegistry() {
        return new SessionRegistryImpl();
    }
现在一切看起来都很好,工作也和预期的一样,除了我在这里想要的是,一旦检测到新的登录,所有以前的登录都应该注销,并且只应该维护一个并发会话/登录。 但实际上发生的是,对于所有新登录,上一个会话将过期,并创建和提供一个新会话用于登录,但当我返回到任何上一个登录屏幕时,它开始使用创建的新会话,并且应用程序工作正常,而不是注销。他们都共享相同的会话id,浏览器中的另一个观察结果是,它仍然在cookies中显示旧会话id,而在后端,旧会话id实际上已过期,每个操作的日志仅显示最新的会话id

因此,总而言之,我能够使用相同的会话Id登录到多个位置,我所期望的是,它应该注销所有以前的登录,而用户不应该对此采取任何操作

注意:对于特权用户,它仍然可以正常工作,每个新登录都有一个新的会话Id,并且所有用户都保留该Id,并且不共享会话Id

@Bean
    public SessionRegistry getSessionRegistry() {
        return new SessionRegistryImpl();
    }