迁移至SpringBoot 3.2.0时遇BeanDefinitionStoreException错误求解决方案
解决方案:SpringBoot 3.2.0迁移时BeanDefinitionStoreException问题
问题根源
Spring Boot 3.x 对应的 Spring Security 6.x 已完全重构 OAuth2 模块,旧版的 org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfiguration 类已被移除,你当前的依赖配置和代码仍在引用废弃的 OAuth2 组件,导致加载配置类时出现IO异常。
具体解决步骤
- 替换依赖:移除手动指定的
spring-security-config(Spring Boot Starter 会自动管理版本),添加官方推荐的 OAuth2 资源服务器 starter:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-resource-server</artifactId> <version>3.2.0</version> </dependency>
保留 spring-boot-starter-security 即可,无需单独指定版本。
- 重构配置代码:删除基于旧
ResourceServerConfiguration的配置类,改用 Spring Security 6.x 的新配置方式(以JWT令牌为例):
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.web.SecurityFilterChain; @Configuration public class ResourceServerConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth -> auth .anyRequest().authenticated() ) .oauth2ResourceServer(oauth2 -> oauth2 .jwt() ); return http.build(); } }
- 清理依赖冲突:执行依赖树命令(Maven用
mvn dependency:tree,Gradle用./gradlew dependencies)排查旧版 OAuth2 依赖(比如spring-security-oauth2),通过<exclusions>标签排除冲突依赖:
<dependency> <!-- 替换为实际存在冲突的依赖 --> <groupId>com.example</groupId> <artifactId>conflicting-dependency</artifactId> <exclusions> <exclusion> <groupId>org.springframework.security</groupId> <artifactId>spring-security-oauth2</artifactId> </exclusion> </exclusions> </dependency>
内容的提问来源于stack exchange,提问作者harry
相关产品推荐
相关产品推荐

