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春季文档的一部分将帮助您定制过滤器。