我正在使用弹簧安全 3.1。
我必须以用户指定最大会话数的方式实施会话并发策略。这是我所做的:
编写了一个扩展 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”:(
我在spring api中进行了挖掘,发现以下行(70)SessionManagementFilter
是错误的(防止任何SessionAuthenticationStrategy
被调用):
if (!securityContextRepository.containsContext(request))
这是为什么 ?我阅读了他们建议在 中设置会话身份验证策略的文档UsernamePasswordAuthenticationFilter
,但这对我来说不是一个选项,因为我将表单登录与 SAML 登录以及PreAuthentication
验证身份验证令牌的机制(3 种不同的身份验证机制)相结合。
你们中的任何人都可以帮忙吗?