Spring Security - 两个独立的身份验证信息源

问题描述:

我的Spring Security基于表单的登录目前包含一个表单和缺省的LdapAuthenticationProvider,我能够正确进行身份验证。 但有一个新的要求来检查用户是否启用。这些信息在数据库中而不是LDAP中。那么,我该如何做到这一点?Spring Security - 两个独立的身份验证信息源

我应该寻找在successfulAuthentication方法

还是有更好的方式来做到这一点使用AbstractAuthenticationProcessingFilter和执行额外的检查。

我想说扩大UsernamePasswordAuthenticationFilter和覆盖attemptAuthentication()是一个好方法。在attemptAuthentication()中,您可以检查数据库数据和LDAP数据。您可以使用UserDetailsService加载用户信息,如this

另一种方式是(如你所说你自己)延长AbstractAuthenticationProcessingFilter像这样的FORM_LOGIN过滤器运行后您的过滤器:

<http ...> 
    ... 
    <custom-filter after="FORM_LOGIN_FILTER" ref="myAuthenticationProcessingFilter" /> 
</http> 

一个好主意可能是让2个独立的过滤器LDAP和DB认证一个接着一个地跑。这样,如果需要,您可以关闭其中的任何一个。

This春季文档的一部分将帮助您定制过滤器。