spring Security xml配置适用于旧版(如4.2.x),需在applicationContext-security.xml中定义命名空间、http安全规则、authentication-manager等,并通过web.xml加载;但自Spring 5/Boot 2.0起官方主推java Config,XML不再维护且Boot默认不支持。

spring security 的 XML 配置在较老版本(如 Spring 3.x / 4.x)中常用,但自 Spring 5 和 spring boot 2.0 起,官方已强烈推荐使用 Java Config(@Configuration + WebSecurityConfigurerAdapter 或新式 SecurityFilterChain),XML 方式不再被积极维护,且 Spring Boot 默认不支持 XML 安全配置。
不过如果你维护遗留项目、必须用 XML,或学习传统配置逻辑,以下是典型、可运行的 Spring Security XML 配置要点和示例(基于 Spring Security 4.2.x + Spring 4.x):
基础 XML 配置结构
需在 Spring 的主配置文件(如 applicationContext-security.xml)中定义,确保引入正确命名空间:
注意:
- `{noop}` 表示明文密码(仅用于测试),生产环境必须用 `{bcrypt}` 等加密前缀 + 编码后密码
- `auto-config=”true”` 自动启用 form-login、csrf、logout 等常见功能;设为 `false` 则需手动配置每项
- 该 XML 文件需被 Spring 容器加载,例如在 web.xml 中通过 `ContextLoaderListener` 引入:
contextConfigLocation classpath:applicationContext.xml classpath:applicationContext-security.xml
关键配置项说明
常见需求对应 XML 写法:
- 关闭 CSRF(仅调试用): `
` 放在 ` ` 内 - 自定义登录成功/失败跳转: `
ailure-handler-ref=”myFailureHandler”/>`(需提前定义 Bean) - JDBC 认证: 替换 `
` 为 ` `,并确保 `dataSource` Bean 已定义 - 角色层级(如 ROLE_ADMIN 可访问 ROLE_USER 资源): 在 `
` 外加 ` access-control>` 或用 ` ` 配合自定义 `RoleHierarchy` Bean
与 Web 集成要点
XML 配置生效的前提:
- 确保 `spring-security-web` 和 `spring-security-config` JAR 在 classpath(maven 依赖需齐全)
- 在 `web.xml` 中注册 Spring Security 过滤器链:
springSecurityFilterChain org.springframework.web.filter.DelegatingFilterproxy springSecurityFilterChain /*
这是核心——没有它,XML 配置完全不会执行。
为什么不推荐继续用 XML?
不是“不能用”,而是现实约束明显:
- XML 无法利用 Java 编译期检查,配错属性名或值类型只能运行时报错
- 复杂逻辑(如动态权限、OAuth2、JWT 解析)在 XML 中难以表达,最终还得写 Java 类+注入
- Spring Boot 项目默认忽略 XML 安全配置,强行启用需额外排除自动配置、手动注册 `FilterChainProxy`,得不偿失
- 社区支持、文档、Stack overflow 示例几乎全部转向 Java Config
基本上就这些。真要维护 XML 项目,建议逐步将安全逻辑抽成 `AuthenticationProvider`、`accessDecisionVoter` 等 Java 组件,再由 XML 引用,为后续迁移铺路。