Java 集群环境下Spring安全并发会话控制max session

Java 集群环境下Spring安全并发会话控制max session,java,spring,spring-mvc,spring-security,Java,Spring,Spring Mvc,Spring Security,我使用的是SpringFramework4.0发行版,以及SpringSecurity3.2发行版。我遇到了一种情况,需要使用该特性来限制同一用户id的活动会话的数量。通过阅读Spring安全文档,我了解到Spring安全性提供了一种类型的特性。我试过用这种方式来实现它。它运行良好(在单个系统上)。我已经将CustomUserDetailsService类与CustomUserDetails类一起使用 现在出现的一个问题是,如何在集群环境中实现这种行为?我有一个带有粘性会话机制的集群环境。您需要

我使用的是SpringFramework4.0发行版,以及SpringSecurity3.2发行版。我遇到了一种情况,需要使用该特性来限制同一用户id的活动会话的数量。通过阅读Spring安全文档,我了解到Spring安全性提供了一种类型的特性。我试过用这种方式来实现它。它运行良好(在单个系统上)。我已经将CustomUserDetailsService类与CustomUserDetails类一起使用


现在出现的一个问题是,如何在集群环境中实现这种行为?我有一个带有粘性会话机制的集群环境。

您需要实现一个自定义的SessonRegistry。您需要一种在集群节点之间共享会话的方法(pref:database)

因此,当用户的成功身份验证。。检查是否已经为用户(在数据库中)分配了sessionId。然后,使先前的会话无效并保存新会话Id


此外,为了验证请求,您需要使用数据库对其进行验证。

是的,这是在集群环境中管理并发会话的一种方法。我想到的一种方法是使用分布式缓存。实际上,我希望Spring框架本身能够提供任何支持,这样我就不需要关心每个集群上每个用户的活动会话。但听起来SpringSecurity并没有提供它。我已经阅读了SpringSecurity3.2版本的参考手册。但在集群环境中几乎无法获得有关
max session
属性的信息。您知道SpringFramework对集群环境的支持吗?要这样做,您认为哪种方式更好?要自定义SessionRegistry接口的实现,还是要让会话侦听器处理用户会话?会话侦听器?你打算怎么做。在我的一个项目中,我使用了自定义SessionRegistry和ConcurrentSessionControlStrategy的组合来实现这一点,现在我有两个选择。一种是使用SessionListener。我目前正在开发的应用程序的用户数量非常有限。因此,通过迭代SessionRegistryImpl中的所有可用会话。这不是最好的处理方式。另一种方法是实现SessionRegistry的自身实现。但是我对实现一个定制的应用程序知之甚少<代码>ConcurrentSessionControlRegistry在我使用的SpringSecurity3.2中被弃用。顺便问一下,您是如何重写
SessionRegistry
接口的行为的?我的意思是,我试图重写它,但要执行它所需的操作,必须有
SessionInformation
对象。那个么,有并没有办法分配自定义会话信息而不是SpringSecurity中的会话信息呢?因为我使用JPA将会话相关信息存储到数据库&使用sessionId获取数据需要有
SessionInformation
的默认参数构造函数。所以,我坚持这一部分。。。任何提示!!