Spring Security 3.0升级至3.2的XML配置迁移咨询
嘿,我帮你梳理下从Spring Security 3.0升级到3.2的核心配置调整点,结合你给出的现有配置片段来拆解:
首先先把你给出的现有配置片段整理出来:
<security:http auto-config="true" realm="Domaine XXX" access-denied-page="/jsps/login/access-denied.action"> <security:http-basic /> <security:intercept-url pattern="/services/*" access="IS_AUTHENTICATED_ANONYMOUSLY" /> <security:intercept-url pattern="/index.jsp" filters="none" /> <security:intercept-url pattern="/jsps/i18n/**" filters="none" /> <!-- 剩余的intercept-url配置 --> </security:http>
核心升级调整点
1. 替换废弃的filters="none"写法
Spring Security 3.1开始就废弃了filters="none"属性,3.2里虽然还能凑活用,但官方明确不推荐了。取而代之的是用独立的<security:http>块来配置完全不需要安全过滤的路径。你可以把原来的两行配置改成:
<security:http pattern="/index.jsp" security="none"/> <security:http pattern="/jsps/i18n/**" security="none"/>
如果路径可以合并,也可以写成一行:
<security:http pattern="/index.jsp,/jsps/i18n/**" security="none"/>
2. 优化auto-config的使用(可选但建议)
3.2还支持auto-config="true",但这个属性后续版本会逐步被弃用。其实你已经显式配置了<security:http-basic />,如果不需要auto-config默认带的form-login等其他认证方式,完全可以把auto-config="true"删掉,只保留你实际需要的配置,这样更清晰。
3. 权限表达式的可读性优化
你当前用的IS_AUTHENTICATED_ANONYMOUSLY在3.2里依然有效,但官方推荐用更直观的permitAll来替代,效果完全一样,但可读性强很多。修改后是:
<security:intercept-url pattern="/services/*" access="permitAll" />
4. 保证依赖版本统一
升级的时候一定要确保所有Spring Security相关的依赖(比如spring-security-web、spring-security-config)都用3.2.x的同一个稳定版本,避免版本冲突。比如Maven里可以这么配置:
<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>3.2.10.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>3.2.10.RELEASE</version> </dependency>
(3.2系列的最后一个稳定版本是3.2.10.RELEASE)
5. 其他细节检查
- 如果你的项目里有自定义过滤器,3.2对过滤器链的顺序有细微调整,要确保自定义过滤器的配置位置正确。
access-denied-page属性在3.2里依然能用,但如果需要更灵活的权限拒绝处理,可以考虑换成access-denied-handler配置自定义处理器。
最后给你一个修改后的完整配置示例参考:
<!-- 先配置不需要安全过滤的路径 --> <security:http pattern="/index.jsp" security="none"/> <security:http pattern="/jsps/i18n/**" security="none"/> <!-- 主安全配置块 --> <security:http realm="Domaine XXX" access-denied-page="/jsps/login/access-denied.action"> <security:http-basic /> <security:intercept-url pattern="/services/*" access="permitAll" /> <!-- 这里补上你剩余的intercept-url配置 --> </security:http>
内容的提问来源于stack exchange,提问作者sanvi srivastava
相关产品推荐
相关产品推荐

