You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置Spring Security的Gradle项目遇OAuth2启动错误求助

解决Spring OAuth2应用中WebSecurityConfigurerAdapter找不到的栈错误

嘿,这个问题我之前踩过一模一样的坑!不管是本地gradle test还是Heroku部署崩溃,核心原因都是同一个——WebSecurityConfigurerAdapter类在Spring Security 5.7及以后的版本里已经被彻底移除了,而你的项目依赖的Spring Boot版本(大概率是2.7.x及以上)刚好引入了这个新版Spring Security,导致依赖这个类的自动配置(比如OAuth2SsoDefaultConfiguration)无法正常加载,最终抛出BeanDefinitionStoreException。

下面是一步步的解决方案:

1. 先确认你的依赖版本

打开项目根目录下的build.gradle文件,先看Spring Boot的版本号:

  • 如果是2.7.x或更高,对应的Spring Security就是5.7+,这个版本已经删掉了WebSecurityConfigurerAdapter。
  • 你也可以运行./gradlew dependencies命令查看完整的依赖树,确认Spring Security的具体版本,确保不是误引入了新版依赖。

2. 替换WebSecurityConfigurerAdapter的旧用法

如果你的代码里直接继承了这个类,必须改成Spring官方推荐的组件式安全配置:

旧代码(会报错):

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // 你的原有配置
    }
}

新代码(兼容新版Spring Security):

import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.context.annotation.Bean;
import static org.springframework.security.config.Customizer.withDefaults;

@EnableWebSecurity
@Configuration
public class SecurityConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            // 关闭CSRF(如果是前后端分离或不需要的话,可根据实际情况调整)
            .csrf(AbstractHttpConfigurer::disable)
            // 配置权限规则
            .authorizeHttpRequests(auth -> auth
                .anyRequest().authenticated()
            )
            // 启用OAuth2登录,适配Google OAuth2
            .oauth2Login(withDefaults());
        
        return http.build();
    }
}

3. 调整OAuth2 SSO的依赖与配置

错误日志里提到的OAuth2SsoDefaultConfiguration是旧版的OAuth2单点登录自动配置,它依赖WebSecurityConfigurerAdapter,所以需要切换到新版的OAuth2客户端依赖:

  • 在build.gradle里确保依赖的是新版的starter:
    implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
    
  • 然后在application.properties(或application.yml)里配置Google OAuth2的客户端信息:
    spring.security.oauth2.client.registration.google.client-id=你的Google客户端ID
    spring.security.oauth2.client.registration.google.client-secret=你的Google客户端密钥
    spring.security.oauth2.client.provider.google.authorization-uri=https://accounts.google.com/o/oauth2/v2/auth
    spring.security.oauth2.client.provider.google.token-uri=https://oauth2.googleapis.com/token
    spring.security.oauth2.client.provider.google.user-info-uri=https://www.googleapis.com/oauth2/v3/userinfo
    

4. 本地测试与Heroku部署验证

  • 先在本地运行./gradlew clean test,确认测试用例能正常通过;再启动应用./gradlew bootRun,检查是否能正常启动并跳转Google登录。
  • 部署到Heroku之前,确保Procfile配置正确(比如web: java -jar build/libs/你的应用名称.jar),Heroku的Gradle构建会自动拉取正确的依赖,只要本地验证通过,部署后应该就能正常运行了。

额外注意点

  • 别想着降级Spring Security版本来兼容旧类,旧版本存在已知的安全漏洞,官方已经停止维护,迁移到新配置才是长久之计。
  • 如果你的项目里还有其他依赖WebSecurityConfigurerAdapter的代码(比如获取AuthenticationManager),也要对应调整——比如可以通过AuthenticationManagerBuilder的Bean来获取,或者直接用@Autowired注入。

内容的提问来源于stack exchange,提问作者Alex Malcolm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:04:19