如何在Spring Security中更改ProviderManager的行为?

时间:2015-01-22 12:02:44

标签: java spring spring-mvc spring-security

ProviderManager的默认行为是:

  1. 尝试使用AuthenticationProviders List进行身份验证,直到获得成功或耗尽所有AuthenticationProviders。

  2. 如果抛出InternalAuthenticationServiceException,则ProviderManager会重新生成此函数,并且不会尝试使用更多的AuthenticationProviders。

  3. 如果抛出AccountStatusException,ProviderManager会重新生成它,并且它不会尝试使用更多的AuthenticationProviders。

  4. 我想要的是什么:

    1. 如果是InternalAuthenticationServiceException,那么它应该检查是否允许使用其他AuthenticationProviders,如果是,那就去吧。

    2. 如果抛出了AuthenticationException,这意味着用户未经身份验证,而不是重新抛出它并向调用者发送未经身份验证的响应,请不要尝试使用更多身份验证提供者。

    3. 我做了什么:

      我创建了自己的ProviderManager(让我们称之为MyProviderManager)类,并为authenticate(身份验证身份验证)方法编写了自己的定义。

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

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

1 个答案:

答案 0 :(得分:0)

所以答案是

  1. 通过XML或JAVA定义您自己的Provider bean配置。

  2. 在Http和global-method-security中,添加authentication-manager-ref作为bean id,Spring Security将使用您的Provider Manager而不是Springs'。