Spring-MVC 3.2升级至5.0时spring-security.xml配置报错求助
问题排查与修复方案
错误日志明确指出ConcurrentSessionFilter类不存在sessionexpiredUrl可写属性,这是Spring Security从3.x升级到4.x及以上版本时的不兼容变更导致的,同时你的配置文件还存在多处语法错误,全部修复方案如下:
1. 修复ConcurrentSessionFilter配置(解决首要报错)
Spring Security 4.0+版本中,ConcurrentSessionFilter的sessionExpiredUrl属性已被移除,改为通过构造函数直接传入会话过期跳转地址,把你的concurrencyFilter配置替换为如下内容:
<beans:bean id="concurrencyFilter" class="org.springframework.security.web.session.ConcurrentSessionFilter"> <beans:constructor-arg name="sessionRegistry" ref="sessionRegistry" /> <beans:constructor-arg name="expiredUrl" value="/web/Default.html" /> </beans:bean>
2. 修复配置文件中的其他语法错误
这些错误会在你解决第一个问题后继续导致启动失败,需同步修改:
- 修复
<session-management>标签属性拼写错误:
原配置:<session-management session-authentication strategy-ref="sas" invalid-session-url="/web/Auth.html" />
修改为:<session-management session-authentication-strategy-ref="sas" invalid-session-url="/web/Auth.html" /> - 修复拦截路径中的空格错误:把两处
j_spring security_check都修改为j_spring_security_check - 修复Bean ID中的空格错误:
原配置:<beans:bean id="CustomAuthentication Provider" class="com.test.authentication.CustomAuthenticationProvider"/>
修改为:<beans:bean id="CustomAuthenticationProvider" class="com.test.authentication.CustomAuthenticationProvider"/> - 修复引用名称的空格错误:
原配置myAuthFilter里的<beans:property name="authenticationManager" ref="authentication Manager" />
修改为:<beans:property name="authenticationManager" ref="authenticationManager" /> - 修复标签闭合错误:sas的Bean配置里,RegisterSessionAuthenticationStrategy的闭合标签原是
</beans:beans>,修改为</beans:bean>
3. 额外兼容提示
Spring Security 5.0+默认要求配置密码编码器,如果你之前没有显式配置,启动后可能会报密码编码器相关错误,可以在配置中添加如下Bean(生产环境不推荐使用NoOpPasswordEncoder,建议替换为BCryptPasswordEncoder等强加密编码器):
<beans:bean id="passwordEncoder" class="org.springframework.security.crypto.password.NoOpPasswordEncoder" factory-method="getInstance"/>
在你的CustomAuthenticationProvider中注入该passwordEncoder使用即可。
内容的提问来源于stack exchange,提问作者Vani
相关产品推荐
相关产品推荐

