这种异常百度一下一大把,但是还是没解决我这问题,那么只能看源码自己分析了,所以记录一下。
原因:往spring注入了2个PasswordEncoder接口实现类,导致spring不知道取哪个。
解决问题思路:
1、首先定位这个异常在源码的哪个地方。
2、然后通过debug方式,查找从哪里进来的,
我自定义实现了PasswordEncoder接口,为什么不走我自定义的matches方法,而是走PasswordEncoder接口的DelegatingPasswordEncoder实现类?
那么只能继续往上找,哪个地方给PasswordEncoder接口的实现类进行初始化。
找到了他的set方法,有点眉目了,点击这个set方法,根据看源码经验,应该是这个Initialalize方法
**这个方法给PasswordEncoder赋值了,首先调用getBeanOrNull方法去spring 容器中获取这个接口的bean,但是获取是null,我明明加了@Component注入了为什么没获取到,那么这时候就思考是不是注入到spring容器有问题。**然后查看代码发现我为PasswordEncoder接口注入了2个实现类。导致不知道取哪个,所以返回空。
然后 DaoAuthenticationProvider provider = new DaoAuthenticationProvider();这行代码会默认给PasswordEncoder接口赋值,如果PasswordEncoder为空那么就用默认值。
There is no PasswordEncoder mapped for the id “null“ 异常
最新推荐文章于 2024-07-15 17:19:02 发布