如何从Spring Security 5迁移到Spring Security 6/Spring Boot 3
内容提要
Spring Security 6 带来了变化,移除了已弃用的方法并引入了新方法。本教程解释了如何从 Spring Security 5 迁移到 6,使用 lambda DSL 进行简化配置。OpenRewrite 可以加快这一过程。讨论了 Spring Security 和 Spring Boot 之间的版本兼容性,并提供了代码修改示例。
延伸解读
迁移前的版本兼容性检查
Spring Boot 2 默认使用 Spring Security 5,而 Spring Boot 3 使用 Spring Security 6。若项目仍基于 Spring Boot 2,可通过在 pom.xml 的 properties 中指定 spring-security.version 来覆盖默认版本,提前使用 Spring Security 6。但需注意,Spring Security 6 要求 Java 17 及以上,且使用 jakarta 命名空间,升级前应确认运行环境是否满足。
增量迁移策略与 IDE 辅助
Spring 官方建议采用增量迁移,避免直接升级导致现有代码失效。可先将 Spring Boot 应用升级到 Spring Security 5.8.5,并利用 IDE 的弃用警告逐步替换已弃用方法。这样能在迁移到 6 之前提前适配新特性,降低一次性升级的风险。
核心配置重构要点
Spring Security 6 移除了 WebSecurityConfigurerAdapter,改为基于组件的配置。需注册 WebSecurityCustomizer bean 来排除静态资源,注册 InMemoryUserDetailsManager bean 管理用户,注册 SecurityFilterChain bean 配置 HTTP 安全。同时,authorizeRequests() 被 authorizeHttpRequests() 替代,antMatcher() 和 mvcMatcher() 被
OpenRewrite 的自动化迁移与局限
OpenRewrite 可通过 Maven 插件自动将 Spring Boot 应用升级到 3.x,并同步迁移安全配置。在 pom.xml 中配置 rewrite-maven-plugin 并指定 UpgradeSpringBoot_3_0 recipe,运行 mvn rewrite:run 即可。但需注意,OpenRewrite 目前不会将安全配置迁移为 lambda DSL,这部分仍需手动调整。
Q&A
Spring Security 6 相比于 5 有哪些主要变化?
Spring Security 6 移除了 WebSecurityConfigurerAdapter 类,采用基于组件的安全配置,并引入了 authorizeHttpRequests()、requestMatcher() 和 securityMatcher() 等新方法。
如何使用 OpenRewrite 加快迁移到 Spring Security 6 的过程?
可以在 pom.xml 中添加 OpenRewrite 插件,并使用特定的 recipe 来自动化迁移过程,从而加快升级到 Spring Security 6 的速度。
在迁移到 Spring Security 6 时,如何处理已弃用的方法?
建议采用增量迁移方法,逐步替换已弃用的方法,并利用 IDE 的警告功能来识别这些方法。
Spring Boot 2 和 Spring Boot 3 在 Spring Security 版本上有什么区别?
Spring Boot 2 默认使用 Spring Security 5,而 Spring Boot 3 则使用 Spring Security 6。
如何在 Spring Security 6 中配置 HTTP 安全?
在 Spring Security 6 中,可以通过注册 SecurityFilterChain bean 来配置 HTTP 安全,使用 authorizeHttpRequests() 方法定义授权规则。
迁移到 Spring Security 6 时需要注意哪些项目设置?
需要在 pom.xml 中添加 spring-boot-starter-web 和 spring-boot-starter-security 依赖项,并确保使用 Java 17 及以上版本。