我正在尝试使用Spring安全性版本4.0在我的项目中实现Spring并发会话控制。我实现了扩展AbstractAuthenticationProcessingFilter
的自定义类。以下是我的配置。
的web.xml
<listener>
<listener-class>
org.springframework.security.web.session.HttpSessionEventPublisher
</listener-class>
</listener>
安全配置
根据我的理解,我需要将NullAuthenticatedSessionStrategy
中的默认AbstractAuthenticationProcessingFilter
替换为concurrentSessionControlAuthenticationStrategy
。这应该是诀窍。因此,无论何时创建/销毁会话HttpSessionEventPulisher
都会通知concurrentSessionControlAuthenticationStrategy
,它将从SessionRegistry
添加/删除该会话。默认情况下,maximumSessions
设置为1,因此如果用户尝试登录多次; concurrentSessionControlAuthenticationStrategy
会抛出错误。但是,通过以下配置,身份验证策略不会设置为并发。
http
.sessionManagement()
.sessionAuthenticationStrategy(concurrentSessionControlAuthenticationStrategy());
@Bean
public SessionRegistry sessionRegistry(){
return new SessionRegistryImpl();
}
@Bean
public ConcurrentSessionControlAuthenticationStrategy concurrentSessionControlAuthenticationStrategy(){
return new ConcurrentSessionControlAuthenticationStrategy(sessionRegistry());
}
我可以使用
从子类设置它setSessionAuthenticationStrategy(concurrentSessionControlAuthenticationStrategy);
但是在这种情况下,无论我使用同一个用户登录多少次,SessionResgistry始终为空。如果我已经理解了春天的并发会话控制是如何工作的,或者我的配置中是否有任何遗漏,那么有人可以指导。谢谢你的帮助。欣赏它。