当前位置: 首页 > 知识库问答 >
问题:

错误在外接程序OAuth2的类路径资源中定义的名为“springSecurityFilterChain”的bean定义无效

巫煌
2023-03-14

我有应用程序Java11Spring启动与CRUD api工作查找,我尝试添加OpenId连接插头以供使用,我的豆上有错误。

在类路径资源中定义了名称为“springSecurityFilterChain”的无效 Bean 定义[com/mypackage/hexa/application/OAuth2安全性.class]: 无法注册 Bean 定义 [根 Bean: 类 [null]; 范围=; 抽象=假; 惰性输入=null; 自动连线模式 =3; 依赖项检查 =0; 自动连接扫描=true; primary=false; 工厂名称=OAuth2安全性验证=Spring安全滤链;初始化方法名称= 空;销毁方法名称=(推断);在类路径资源 [com/mypackage/hexa/application/OAuth2SecurityConfig.class]] 中定义,用于 Bean 'springSecurityFilchain': 已经有 [根 Bean: 类 [空]; 范围=; 摘要=假; 惰性输入=空; 自动连接模式 =3; 依赖关系检查=0; 自动连接扫描=true; primary=false; 工厂BeanName=org.springframework.security.config.annotation.web.configuration.WebSecurityFifit 配置; 工厂方法名称=Spring Security过滤器链; init方法名称=空; 销毁方法名称=(推断);在类路径资源中定义 [组织/Spring框架/安全/配置/注释/web/配置/Web安全配置.class]] 绑定。

@Configuration
@EnableWebSecurity
public class OAuth2SecurityConfig {
    @Bean
    SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
        http
                .authorizeExchange(exchanges ->
                        exchanges
                                .pathMatchers("/", "/error").permitAll()
                                .anyExchange().authenticated()
                )
                .oauth2Login((Customizer<ServerHttpSecurity.OAuth2LoginSpec>) withDefaults());
        return http.build();
    }
}
@Controller
public class UserController {
    @GetMapping("/")
    public String index(){
        return "index";
    }

    @GetMapping("/user")
    public String user(Model model,
                       @AuthenticationPrincipal OidcUser oidcUser) {
        model.addAttribute("userName", oidcUser.getName());
        model.addAttribute("audience", oidcUser.getAudience());
        return "user";
    }
}

org . spring framework . beans . factory . unsatisfieddependencyexception:创建名为“org . spring framework . security . config . annotation . web . configuration . websecurityconfiguration”的bean时出错:通过方法“setFilterChains”参数0表示的不满足的依赖关系;嵌套异常为org . spring framework . beans . factory . beancreationexception:创建在类路径资源[org/spring framework/boot/auto configure/security/oauth 2/client/servlet/oauth 2 web security configuration $ oauth2SecurityFilterChain configuration . class]中定义的名为“oauth 2 security filterchain”的bean时出错:通过工厂方法进行的Bean实例化失败;嵌套异常为org . spring framework . beans . bean instantiation exception:无法实例化[org . spring framework . security . web . security filter chain]:工厂方法“oauth2SecurityFilterChain”引发了异常;嵌套异常为org . spring framework . beans . factory . beancreationexception:创建在类路径资源[org/spring framework/boot/auto configure/security/oauth 2/client/servlet/oauth 2 clientRegistrationRepository configuration . class]中定义的名为“clientRegistrationRepository”的bean时出错:通过工厂方法进行的Bean实例化失败;嵌套异常为org . spring framework . beans . bean instantiation exception:无法实例化[org . spring framework . security . oauth 2 . client . registration . inmemoryclientregistrationrepository]:工厂方法“ClientRegistrationRepository”引发了异常;嵌套异常为Java . lang . illegalargumentexception:无法使用提供的“https://idsvr . example . com/oauth/v2/oauth-anonymous”颁发者解析配置

共有1个答案

岳茂
2023-03-14

您正在尝试覆盖bean,但默认情况下未启用它。

设置spring.main.allow定义覆盖

或者如果使用yml配置,

spring:
   main:
     allow-bean-definition-overriding: true

以再次启用覆盖。

注意:豆子覆盖必须从Spring启动2.1开始启用,

https://github . com/Spring-project/Spring-Boot/wiki/Spring-Boot-2.1-Release-Notes

 类似资料: