lio*_*ior 4 java spring spring-mvc spring-security
我有一个使用 ConcurrentSessionControlStrategy 和我自己的 sessionRegistry 实现的工作配置。我升级到spring security 3.2.4并且必须将ConcurrentSessionControlStrategy更改为ConcurrentSessionControlAuthenticationStrategy。现在似乎 sessionRegistry 未连接,这意味着 ConcurrentSessionControlAuthenticationStrategy.onAuthenticaton 不会进入 sessionRegistry.registerNewSession。去什么?
我的配置xml:
<security:http use-expressions="true" auto-config="false"
entry-point-ref="loginUrlAuthenticationEntryPoint">
<security:intercept-url pattern="/**"
access="isAuthenticated()" />
<security:custom-filter position="FORM_LOGIN_FILTER"
ref="twoFactorAuthenticationFilter" />
<security:logout logout-url="/player/logout"
logout-success-url="/demo/player/logoutSuccess" />
<security:session-management>
<security:concurrency-control
max-sessions="1" session-registry-ref="clusteredSessionRegistryImpl"
error-if-maximum-exceeded="false" />
</security:session-management>
</security:http>
<bean
class="org.springframework.security.web.authentication.session.ConcurrentSessionControlAuthenticationStrategy">
<constructor-arg ref="clusteredSessionRegistryImpl" />
<property name="maximumSessions" value="1" />
</bean>
<bean id="loginUrlAuthenticationEntryPoint"
class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
<property name="loginFormUrl" value="/demo/player/login?login_error=true" />
</bean>
<bean id="twoFactorAuthenticationFilter" class="com.XXX.filter.TwoFactorAuthenticationFilter">
<property name="authenticationManager" ref="authenticationManager" />
<property name="authenticationFailureHandler" ref="failureHandler" />
<property name="authenticationSuccessHandler" ref="playerAuthenticationSuccessHandler" />
<property name="postOnly" value="true" />
</bean>
<bean id="failureHandler"
class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler">
<property name="defaultFailureUrl" value="/login?login_error=true" />
</bean>
<bean id="bCryptPasswordEncoder"
class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder" />
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider
ref="authenticationProvider">
</security:authentication-provider>
</security:authentication-manager>
</beans>
Run Code Online (Sandbox Code Playgroud)
看来我的答案迟到了,但无论如何..
的功能ConcurrentSessionControlStrategy现在完全分为三个策略 - ConcurrentSessionControlAuthenticationStrategy、SessionFixationProtectionStrategy和RegisterSessionAuthenticationStrategy。
要找到正确的替代者,您应该按CompositeSessionAuthenticationStrategy上述顺序添加这三个代表。
因此,恐怕ConcurrentSessionControlAuthenticationStrategy在弃用注释中错误地提到了 来代替ConcurrentSessionControlStrategy. 它至少需要可用性RegisterSessionAuthenticationStrategy来维护SessionRegistry。否则,SessionRegistry保持为空,并且“替代者”总是报告“ok”。
我想,该方法已更改,以使其更加灵活,将多个处理程序作为委托而不是一个(使用CompositeSessionAuthenticationStrategy,您可以让任意数量的处理SessionAuthenticationStrategy程序执行独立的事情:)。
| 归档时间: |
|
| 查看次数: |
4185 次 |
| 最近记录: |