我的Spring Security基于表单的登录目前包含一个表单和默认的LdapAuthenticationProvider,我能够正确地进行身份验证。 但是有一个新的要求来检查用户是否已启用。此信息在数据库而不是LDAP中。那我该怎么做?
我是否应该考虑使用AbstractAuthenticationProcessingFilter并在successAuthentication方法中执行额外检查
或者有更好的方法来做到这一点。
答案 0 :(得分:0)
我要说延长UsernamePasswordAuthenticationFilter
并覆盖attemptAuthentication()
是一个好方法。在attemptAuthentication()
中,您可以检查数据库数据和LDAP数据。您可以使用UserDetailsService
等AbstractAuthenticationProcessingFilter
加载用户信息。
另一种方法(正如您自己建议的那样)扩展<http ...>
...
<custom-filter after="FORM_LOGIN_FILTER" ref="myAuthenticationProcessingFilter" />
</http>
并在FORM_LOGIN过滤器之后运行过滤器,如下所示:
{{1}}
一个好主意可能是为LDAP和DB身份验证制作2个单独的过滤器,然后依次运行。这样,如果需要,您可以关闭其中任何一个。
this春季文档的一部分将帮助您自定义过滤器。