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

Spring Security OAuth2报错:缺少ClientRegistrationRepository Bean

Spring Security OAuth2 授权报错:ClientRegistrationRepository Bean 未找到解决方案

一、ClientRegistrationRepository 的作用

这个 Bean 是 Spring Security OAuth2 客户端模块的核心组件,负责存储第三方登录平台(如Google、GitHub)的客户端注册信息,包括客户端ID、客户端密钥、授权地址、令牌地址、用户信息地址等。OAuth2登录流程的初始化、请求转发、令牌校验等环节都依赖它提供的配置信息,没有该Bean,Spring Security无法构建OAuth2相关的过滤器链,因此抛出找不到Bean的错误。

二、问题原因

你的配置类中启用了.oauth2Login()(OAuth2登录功能),但既没有在配置文件中定义第三方登录的客户端信息,也没有手动创建ClientRegistrationRepository Bean,导致Spring Boot自动配置无法生成该Bean。

三、解决方案

根据你的实际需求选择以下方案:

方案1:保留OAuth2第三方登录功能

在application.properties或application.yml中添加第三方登录平台的配置(以Google为例),Spring Boot会自动生成ClientRegistrationRepository Bean:

# 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.registration.google.scope=email,profile
spring.security.oauth2.client.registration.google.redirect-uri={baseUrl}/login/oauth2/code/{registrationId}

# 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
spring.security.oauth2.client.provider.google.user-name-attribute=sub

注:客户端ID和密钥需要到对应平台的开发者后台申请。

方案2:不需要OAuth2第三方登录功能

直接删除配置类中.oauth2Login()相关的代码块,这样Spring Security就不会依赖OAuth2相关组件,报错自动消失。修改后的filterChain方法如下:

@Bean
protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    
    http
        .authorizeHttpRequests()
            .requestMatchers("/").permitAll()
            .requestMatchers("/shop/**").permitAll()
            .requestMatchers("/register").permitAll()
            .requestMatchers("/h2-console/**").permitAll()
            .requestMatchers("/admin/**").hasRole("ADMIN")
            .anyRequest()
            .authenticated()
            .and()
            .formLogin()
            .loginPage("/login")
            .permitAll()
            .failureUrl("/login?error=true")
            .defaultSuccessUrl("/")
            .usernameParameter("email")
            .passwordParameter("password")
            .and()
            .logout()
            .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
            .logoutSuccessUrl("/login")
            .invalidateHttpSession(true)
            .deleteCookies("JSESSIONID")
            .and()
            .exceptionHandling()
            .and()
            .csrf()
            .disable();
    http.headers().frameOptions().disable();
    return http.build();
    
}

方案3:自定义ClientRegistrationRepository(进阶)

如果需要从数据库或其他数据源加载客户端配置,可以手动创建该Bean:

import org.springframework.security.oauth2.client.registration.ClientRegistration;
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
import org.springframework.security.oauth2.client.registration.InMemoryClientRegistrationRepository;
import org.springframework.security.oauth2.core.AuthorizationGrantType;
import org.springframework.security.oauth2.core.oidc.IdTokenClaimNames;

@Bean
public ClientRegistrationRepository clientRegistrationRepository() {
    ClientRegistration googleClient = ClientRegistration.withRegistrationId("google")
            .clientId("你的客户端ID")
            .clientSecret("你的客户端密钥")
            .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
            .redirectUri("{baseUrl}/login/oauth2/code/{registrationId}")
            .scope("email", "profile")
            .authorizationUri("https://accounts.google.com/o/oauth2/v2/auth")
            .tokenUri("https://oauth2.googleapis.com/token")
            .userInfoUri("https://www.googleapis.com/oauth2/v3/userinfo")
            .userNameAttributeName(IdTokenClaimNames.SUB)
            .clientName("Google")
            .build();
    return new InMemoryClientRegistrationRepository(googleClient);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:23:24