解决required a single bean, but 2 were found问题

简介: 背景:springboot整合shiro中自定义Realm时出现错误描述Parameter 0 of method getDefaultWebSecurityManager in cn.ken.springboot_shiro.config.ShiroConfig required a single bean, but 2 were foun

背景:springboot整合shiro中自定义Realm时出现


错误描述


Parameter 0 of method getDefaultWebSecurityManager in cn.ken.springboot_shiro.config.ShiroConfig required a single bean, but 2 were found:


getRealm: defined by method ‘getRealm’ in class path resource [cn/ken/springboot_shiro/config/ShiroConfig.class]

iniClasspathRealm: defined by method ‘iniClasspathRealm’ in class path resource [org/apache/shiro/spring/boot/autoconfigure/ShiroAutoConfiguration.class]

Action:


Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed

场景再现

// 创建安全管理器
@Bean
public DefaultWebSecurityManager getDefaultWebSecurityManager(Realm realm){
    DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();
    // 给安全管理器设置realm
    defaultWebSecurityManager.setRealm(realm);
    return defaultWebSecurityManager;
}

错误分析:容器中出现了两个Realm类型的Bean,注入时不知道选择哪一个

解决方法:在参数中注入Realm时指定bean的id以区分

// 创建安全管理器
@Bean
public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("getRealm") Realm realm){
    DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();
    // 给安全管理器设置realm
    defaultWebSecurityManager.setRealm(realm);
    return defaultWebSecurityManager;
}
// 创建自定义Realm
@Bean
public Realm getRealm(){
    return new CustomerRealm();
}

@Qualifier(“getRealm”)参数之所以为getRealm是因为下面@Bean的方法名为getRealm()

相关文章
|
SQL Java 数据库连接
Mybatis-Plus常用的查询方法--看这一篇就够了!!!
前言: Mybatis-Plus作为Mybatis的增强,自己封装了很多简单还用的方法,来解脱自己写sql! 对于项目的搭建小编就不在说了,可以参考: SpringBoot+Mybatis-Plus的入门搭建与配置测试 这样就可以跟小编站在同一起跑线了,咱们直接开始介绍方法的使用哦!!
1767 2
|
存储 Java Maven
maven在尝试访问nexus存储库时得到“未授权” Not authorized , ReasonPhrase:Unauthorized
maven在尝试访问nexus存储库时得到“未授权” Not authorized , ReasonPhrase:Unauthorized
1040 0
|
JSON 前端开发 Java
RestfulToolKit:便捷的 IDEA 接口测试神器
RestfulToolKit:便捷的 IDEA 接口测试神器
2562 0
RestfulToolKit:便捷的 IDEA 接口测试神器
|
Java
java8中修改parallelStream默认并发数
java8中修改parallelStream默认并发数
2417 0
java8中修改parallelStream默认并发数
|
消息中间件 JSON Java
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
26946 0
|
SpringCloudAlibaba Dubbo 应用服务中间件
SpringCloudAlibaba:3.1dubbo
SpringCloudAlibaba:3.1dubbo
323 2
|
Java
【异常解决】Java运行时发生 java.lang.NoClassDefFoundError: Could not initialize class com.iot.alarm.ProcAlar
【异常解决】Java运行时发生 java.lang.NoClassDefFoundError: Could not initialize class com.iot.alarm.ProcAlar
1856 0
【idea中Activiti BPMN visualizer插件和Camunda Modeler工作流设计器的简单使用】
【idea中Activiti BPMN visualizer插件和Camunda Modeler工作流设计器的简单使用】
3778 0
SpringBoot:Invalid bound statement (not found)的原因和解决方案
SpringBoot:Invalid bound statement (not found)的原因和解决方案
|
负载均衡 算法 Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(四)Ribbon的使用
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(四)Ribbon的使用
415 0