1. spring-security-oauth获取token报StackOverflow异常

1. 需求: 系统存在两种类型的用户, 存储在不同的表中, 需要用不同的鉴权逻辑

2. 异常原因: 

根本原因是注册了两个UserDetailsService, 当InitializeUserDetailsManagerConfigurer执行configure的时候, 会去spring容器中获取UserDetailsService, 当获取到的实例数量>1时, 返回null, 进而导致AuthenticationManagerBuilder没有将DaoAuthenticationProvider注册进去, 会生成ProviderManager代理类, 然后将这个代理类设置为下一个ProviderManager的parent, 当获取token时, ProviderManager.authenticate使用本类的AuthenticationProvider认证失败后, 会调用parent进行认证, 然而parent是同类型的代理类, 实际上执行的还是当前类, 无限递归, 最终 StackOverflow

感觉这块作者设计的不合理, 获取到多个UserDetailsService的时候应该抛出异常, 不应该返回null

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。