问题描述
我想知道如何执行用户锁定(或执行锁定操作的最佳方法),即如果用户已经从某个设备登录并尝试从另一台设备登录,则应该通知他/她会话已经存在可供该用户使用,并可以选择关闭其他会话并开始新的会话。
使用的框架是Spring-MVC + hibernate 4.1。
还有一件事:如何在应用程序上下文中设置一些用户哈希图对象的列表?
1楼
可以通过Spring Security和来完成。 您可以定义可以同时存在多少个会话,并确定如果超过最大数量该怎么办。
2楼
它们是相同的Spring Security中的简单xml配置。 首先,您必须注册SessionRegistry bean。 我已经为会话注册表使用了spring security的SessionRegistryImpl的默认类,例如:
<bean id="sessionRegistry"
class="org.springframework.security.core.session.SessionRegistryImpl" />
之后,我们必须向容器注册ConcurrentSessionControlStrategy,并告诉它每个用户允许的最大会话数。 例:
<bean id="sessionStrategy"
class="org.springframework.security.web.authentication.session.ConcurrentSessionControlStrategy">
<constructor-arg name="sessionRegistry" ref="sessionRegistry" />
<property name="maximumSessions"
value="${security.config.sessionStrategy.maximumSessions.value}" />
<property name="exceptionIfMaximumExceeded" value="true" />
</bean>
security.config.sessionStrategy.maximumSessions.value
是在属性文件中指定的整数值。
通过更改maximumSessions属性值,我们可以轻松定义最大并发用户数。