当用户尝试登录时,我需要做一些自定义的事情,具体取决于他们的用户名,但这些事情需要在身份验证过程之前进行。这是我到目前为止所做的。
我们的系统允许多个电子邮件地址,客户希望用户能够使用其中任何一个进行身份验证。为此,我创建了一个自定义UserDetailsService并让代码正确地查找用户。
我需要做的其他事情需要在spring-security并不真正知道或关心的用户对象上有一些标志。但我需要挂钩到auth进程,检查这些标志,并向用户返回相应的错误消息。为了给出一个更具体的例子,我需要知道这是否是用户第一次登录系统。所以我们在用户上有一个标志来跟踪它。当用户尝试进行身份验证时,我需要读取此值并执行一些操作,包括将消息发送回用户并暂停身份验证。
我查看了文档中的事件监听器机制,但我没有看到如何通过监听器注入我自己的工作流。我需要做这样的流程:
使用有效的电子邮件验证,但第一次 - >取消身份验证 - >在登录页面上显示消息
我认为如果我能够处理这一个场景,我可以找出我需要的其他场景。
更新:我正在阅读过滤器,看看我是否错过了什么......
答案 0 :(得分:4)
最简单的是挂钩身份验证过程就是提供自己的AuthenticationProvider。只有两种方法可以实现。在authenticate()
中,您可以完成所有自定义内容。
要将提供程序配置到框架中,请执行以下操作:
<authentication-manager>
<authentication-provider ref="myAuthenticationProvider" />
</authentication-manager>