ProviderManager的默认行为是:


尝试使用AuthenticationProviders列表进行身份验证,直到获得成功或用尽所有AuthenticationProviders。
如果抛出InternalAuthenticationServiceException,则ProviderManager会抛出该异常,并且不会尝试使用更多的AuthenticationProviders。
如果抛出AccountStatusException,则ProviderManager会抛出该异常,并且不会尝试使用更多的AuthenticationProviders。


我想要的是 :


如果是InternalAuthenticationServiceException,那么它应该检查是否允许使用其他AuthenticationProviders,如果是,则继续使用它。
如果抛出AuthenticationException,则意味着用户未经身份验证,而不是将其重新抛出并向调用者发送未经身份验证的响应,请不要尝试使用更多的AuthenticationProviders。


我做了什么 :

我制作了自己的ProviderManager(让我称之为MyProviderManager)类,并为authenticate(Authentication authentication)方法编写了自己的定义。

现在,我希望spring使用MyProviderManager而不是ProviderManager。

我应该如何配置?
有办法吗?
如果不是,我还可以通过哪些其他方法来更改ProviderManager的行为?

最佳答案

所以答案是


通过XML或JAVA定义自己的Provider bean配置。
在Http和global-method-security中,添加authentication-manager-ref作为您的bean id,Spring Security将使用您的提供者管理器而不是Springs。

关于java - 如何在Spring Security中更改ProviderManager的行为?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28088307/

10-10 00:39