【问题标题】:How to Change behaviour of ProviderManager in Spring Security?如何在 Spring Security 中更改 ProviderManager 的行为?
【发布时间】:2015-03-21 05:12:54
【问题描述】:

ProviderManager 的默认行为是:

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

  2. 如果引发 InternalAuthenticationServiceException,ProviderManager 会重新引发此异常,并且不会尝试更多的 AuthenticationProvider。

  3. 如果引发 AccountStatusException,ProviderManager 会重新引发此异常,并且不会尝试使用更多 AuthenticationProvider。

我想要什么:

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

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

我做了什么:

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

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

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

【问题讨论】:

  • 应该可以。您的安全配置如何?
  • 它现在可以工作了......无论如何,谢谢

标签: java spring spring-mvc spring-security


【解决方案1】:

所以答案是

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

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

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 2011-01-24
    • 2015-07-03
    • 2012-07-19
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多