1

我是 Grails 的新手,并且已经跳入第 2 版。我正在开发一个使用 Spring Security 3 的项目 - 这工作正常 - 但我想使用我的组织 LDAP 服务器(如果/当它可用时)请执行下列操作:

  • 验证用户
  • 使用来自 LDAP 的详细信息更新本地用户数据
  • 如果用户不存在则创建用户
  • 更新本地用户密码(以防 LDAP 服务器不可用)
  • 登录该用户

在实现这项工作的过程中,我可能跳过了很多基本的东西,比如 Grails 的实际工作原理——我正在努力理解如何通过 LDAP 查找实际中断 Spring Security 身份验证过程,然后如何获取这些细节以一种我可以使用它们来更新现有用户或创建新用户的方式返回...

我在这里找到了一个基本教程:http: //jamesjefferies.com/2011/01/06/grails-spring-security-ldap/这意味着我可以从 LDAP 服务器验证自己为用户 - 尽管 Spring Security 仍然显示我为注销,但在我手动注销之前不会让我登录......所以它有点像登录边缘。

神奇的是我的头脑……起初我很惊讶我可以用几个命令和几个小时的定制来构建一个完整的网络应用程序——但它现在又回来咬我了——因为缺乏有用的例子...并且 Spring Security LDAP 插件文档有些缺乏(或者可能是我缺乏理解)。

所以,主要是我想要一些帮助来完成身份验证,以便它检查现有用户的用户数据库并更新它们,或者如果它们不存在则创建用户......但如果有人可以提供,我也会喜欢它我简要概述了 Grails 中的身份验证过程,以便我了解实际发生的情况以及应该在哪里拦截。

提前欢呼任何帮助

史蒂夫

4

1 回答 1

0

这里有一个很好的例子,展示了如何实现自定义用户详细信息映射器。我在 LDAP 登录 Grails 2.0 应用程序上成功使用了该方法。基本上,您有一个实现 UserDetailsContextMapper 接口的 CustomUserDetailsContextMapper,然后您可以通过在 conf>spring>resources.groovy 中注册 bean 来覆盖默认实现。然后在您的 CustomUserDetailsContextMapper 中检查具有匹配用户名的用户(您的域类),如果不存在,则使用来自 ctx.originalAttrs 的数据创建一个,其中包含来自 ldap 查询结果的数据。然后您必须返回一个新的 org.springframework.security.core.userdetails.User。您可以扩展此类以添加您希望能够直接从主体对象访问的其他字段。

于 2012-01-20T14:14:15.507 回答