使用spring-security-core挂钩进行预身份验证

时间:2011-06-20 14:14:51

标签: grails spring-security

当用户尝试登录时,我需要做一些自定义的事情,具体取决于他们的用户名,但这些事情需要在身份验证过程之前进行。这是我到目前为止所做的。

我们的系统允许多个电子邮件地址,客户希望用户能够使用其中任何一个进行身份验证。为此,我创建了一个自定义UserDetailsS​​ervice并让代码正确地查找用户。

我需要做的其他事情需要在spring-security并不真正知道或关心的用户对象上有一些标志。但我需要挂钩到auth进程,检查这些标志,并向用户返回相应的错误消息。为了给出一个更具体的例子,我需要知道这是否是用户第一次登录系统。所以我们在用户上有一个标志来跟踪它。当用户尝试进行身份验证时,我需要读取此值并执行一些操作,包括将消息发送回用户并暂停身份验证。

我查看了文档中的事件监听器机制,但我没有看到如何通过监听器注入我自己的工作流。我需要做这样的流程:

使用有效的电子邮件验证,但第一次 - >取消身份验证 - >在登录页面上显示消息

我认为如果我能够处理这一个场景,我可以找出我需要的其他场景。

更新:我正在阅读过滤器,看看我是否错过了什么......

1 个答案:

答案 0 :(得分:4)

最简单的是挂钩身份验证过程就是提供自己的AuthenticationProvider。只有两种方法可以实现。在authenticate()中,您可以完成所有自定义内容。

要将提供程序配置到框架中,请执行以下操作:

<authentication-manager>
  <authentication-provider ref="myAuthenticationProvider" />
</authentication-manager>