ProviderManager的默认行为是:
尝试使用AuthenticationProviders List进行身份验证,直到获得成功或耗尽所有AuthenticationProviders。
如果抛出InternalAuthenticationServiceException,则ProviderManager会重新生成此函数,并且不会尝试使用更多的AuthenticationProviders。
如果抛出AccountStatusException,ProviderManager会重新生成它,并且它不会尝试使用更多的AuthenticationProviders。
我想要的是什么:
如果是InternalAuthenticationServiceException,那么它应该检查是否允许使用其他AuthenticationProviders,如果是,那就去吧。
如果抛出了AuthenticationException,这意味着用户未经身份验证,而不是重新抛出它并向调用者发送未经身份验证的响应,请不要尝试使用更多身份验证提供者。
我做了什么:
我创建了自己的ProviderManager(让我们称之为MyProviderManager)类,并为authenticate(身份验证身份验证)方法编写了自己的定义。
现在我希望spring使用MyProviderManager而不是ProviderManager。
我该如何配置? 有办法吗? 如果没有,我可以通过哪些其他方法来改变ProviderManager的行为?
答案 0 :(得分:0)
所以答案是
通过XML或JAVA定义您自己的Provider bean配置。
在Http和global-method-security中,添加authentication-manager-ref作为bean id,Spring Security将使用您的Provider Manager而不是Springs'。