如何根据请求选择AuthenticationProviders或在成功的身份验证

时间:2017-01-26 04:45:55

标签: spring-security

目前是否可以配置Spring Security,如果有登录请求,它会首先检查请求然后使用特定的AuthenticationProviders列表?

示例:

我有两种登录请求,一种使用电子邮件和手机号码。该请求带有客户端ID。它首先检查客户端ID是什么,并将请求路由到特定的AuthenticationProviders列表。

应该在哪里应用这个逻辑?我尝试扩展AbstractAuthenticationProcessingFilter,但我无法选择使用哪个AuthenticationProviders,因为它从AuthenticationManager获取列表。

可以改为使用多个AuthenticationManager吗?

修改

我在这里尝试了chaoluo的评论是什么阻止了我。

时,我无法检查身份验证对象的内容
boolean supports(Class<?> authentication) 

被调用。我不知道它是否可能,因为我对Reflection的知识有限。

我正在尝试为每个成功的身份验证实现,响应将根据客户端ID而不同。

我不知道在哪里放置我的逻辑,但是这里列出了我认为应该有效但仍然觉得有更好的方法。

  1. 创建两个身份验证管理器 - 每个管理员都拥有自己独立的AuthenticationProviders列表,以便根据客户端ID控制将使用哪些身份验证提供程序
  2. 一个ProcessingFilter,AuthenticationManager将尝试进行身份验证,一旦成功,AuthenticationSuccessHandler将检查Authentication对象上的客户端ID并根据客户端ID生成相应的响应
  3. 欢迎任何建议。

    验证请求 - &gt;尝试进行身份验证 - &gt;根据客户端ID返回响应。

0 个答案:

没有答案