据我所知,只有在我的 .如果启用此 bean,则为 WebSecurityConfigurerAdapter 扩展类。
@Override
@Bean(name = "MyAuthManager")
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
启用此 bean 后,如果我输入错误凭据,它将进入无限循环。我有从 AbstractUserDetailsAuthenticationProvider 扩展的自定义身份验证提供程序。如果未找到用户,则根据契约(Contract),此类将引发 UsernameNotFoundException。我可以看到不断调用我的retrieveUser。
删除@Bean 注释,使其正常工作。但是我需要在其他地方访问身份验证管理器。
请您参考如下方法:
我不明白将事物粘在一起的所有机制,但 authenticationManagerBean 是重要的线索。不知何故,当 spring security 创建身份验证管理器链时,如果我使用 authenticationManagerBean,父管理器被设置为自我管理器。我的解决方案是在配置期间将父身份验证管理器设置为 null。一定是我的错误或我在某处缺乏理解
@Override
protected void configure(final AuthenticationManagerBuilder auth) throws Exception {
auth.parentAuthenticationManager(null);
}