【问题标题】:Hooking into pre-authentication with spring-security-core使用 spring-security-core 进行预身份验证
【发布时间】:2011-09-18 17:57:02
【问题描述】:

当用户尝试根据他们的用户名登录时,我需要做一些自定义的事情,但这些事情需要在身份验证过程之前发生。这是我到目前为止所得到的。

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

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

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

第一次使用有效邮箱验证 -> 取消验证 -> 在登录页面显示消息

我认为,如果我能处理好一个场景,我就能找出我需要的其他场景。

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

【问题讨论】:

  • 我很惊讶这不在 grails spring 安全文档中
  • 您查看过春季安全文档吗?他们有一些示例,可能会很容易与 grails 插件一起使用
  • 您是否有指向特定内容的链接,以节省我一些时间摸索它们?
  • Spring 文档涵盖的“预身份验证场景”适用于“用户在访问应用程序之前已经通过某些外部系统进行了可靠身份验证”的情况。在您的应用程序实际上要对用户进行身份验证的情况下,我同意下面的@ericacm 自定义 AutheticationProvider 是要走的路。

标签: grails spring-security


【解决方案1】:

最简单的方法是提供您自己的AuthenticationProvider 来连接到身份验证过程。只有两种方法可以实现。在authenticate() 中,您可以执行所有自定义操作。

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

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

【讨论】:

猜你喜欢
  • 2012-11-10
  • 2012-11-27
  • 2013-12-16
  • 1970-01-01
  • 2011-10-17
  • 2018-08-09
  • 2017-04-15
  • 2011-08-14
相关资源
最近更新 更多