在Grails中,如何基于LDAP身份验证创建和/或更新用户,然后将其登录?

时间:2012-01-18 06:35:30

标签: grails spring-security spring-ldap

我是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中身份验证过程的简要概述,这样我就能理解实际发生了什么,以及我应该在哪里拦截事物。

提前为任何帮助干杯

史蒂夫

1 个答案:

答案 0 :(得分:0)

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