我正在使用spring-security 3.1。Custom ConcurrentSessionControlStrategy
我必须以最大会话数由用户指定的方式实现会话并发策略。下面是我做的:
编码扩展 org.springframework.security.web.authentication.session.ConcurrentSessionControlStrategy类和推翻的方法
protected int getMaximumSessionsForThisUser(Authentication authentication)
我使用了命名空间配置它配置:
<security:http>
...
<security:session-management session-authentication-strategy-ref="mySessionAuthenticationStrategy"/>
...
</security:http>
<bean id="mySessionAuthenticationStrategy" class="foo.bar.MySessionAuthenticationStrategy">
<constructor-arg ref="sessionRegistry"/>
</bean>
<bean id="sessionRegistry"
class="org.springframework.security.core.session.SessionRegistryImpl" />
问题是“MySessionAuthenticationStrategy”从不会被调用:(
我在春天API挖地看到,在SessionManagementFilter
以下行(70)是假的(防止任何SessionAuthenticationStrategy
被调用):
if (!securityContextRepository.containsContext(request))
这是为什么? 我阅读他们建议在UsernamePasswordAuthenticationFilter
中设置会话身份验证策略的文档,但由于我将表单登录和SAML登录以及验证身份验证令牌的机制(3种不同的身份验证机制)相结合,因此它不适合我。
你们中的任何人都可以提供帮助吗?
非常好的解释,你是对的。我的PreAuthentication过滤器使用一个使用会话的AuthenticationSuccessHandler(创建一个)。谢谢 ! – baraber