2012-01-18 33 views
1

我是新来的Grails,已经跳入版本2.我正在开发一个使用Spring Security 3的项目 - 这工作正常 - 但我想使用我的组织LDAP服务器(如果/当它可用时)执行以下操作:在Grails中,我如何根据LDAP身份验证创建和/或更新用户,然后登录?

  • 验证用户
  • 更新本地用户数据与LDAP
  • 细节创建用户,如果他们不存在
  • 更新本地用户的密码(万一LDAP服务器不可用)
  • 记录用户i

我可能已经跳过了很多基本的东西来实现这个工作,就像实际上Grails是如何工作的 - 我正在努力理解如何用LDAP查找实际中断Spring Security身份验证过程,然后如何得到这些细节,我可以用它们来更新现有用户或创建一个新的...

我在这里找到了一个基本教程:http://jamesjefferies.com/2011/01/06/grails-spring-security-ldap/这意味着我可以验证自己作为一个来自LDAP服务器的用户 - 尽管Spring Security仍然显示我已经注销,但是不会让我登录,直到我手动注销为止......所以它在登录界面中的种类。

魔法在我的脑海中......起初我很惊讶我可以用一些命令和几个小时的定制来构建一个完整的网络应用程序 - 但它现在又回来咬我了 - 就像缺乏有用的示例......并且Spring Security LDAP插件文档有点缺乏(或者可能是我缺乏理解)。

因此,我主要想要一些帮助来完成身份验证,以便它检查用户数据库中是否存在现有用户并更新它们,或者如果用户不存在则创建该用户......但我也会喜欢它如果有人能够简单介绍一下Grails中的身份验证过程,那么我可以理解实际发生的事情以及我应该在哪里截取事情。

干杯提前任何帮助

史蒂夫

回答

0

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

+0

感谢Dylan,我读过那篇文章并使用了一些内容 - 但它对我没有用处......我现在回想基本文档,试图理解为什么它不是,但我没有制作目前还有很多进展。我会继续尝试并发回我找到的内容。 – Steve 2012-01-25 01:22:34

+0

从那篇文章中,David Russell发表于2010年11月4日的帖子;上午7:17是真正列出完整代码的人。由于我们的ldap数据和我必须部署到使用IBM JDK的webSphere的事实,我不得不做一些调整,因为这些IBM JDK存在一些问题,但大多数情况下都是使用代码。 – 2012-01-25 04:31:47

+0

谢谢,我现在有一个噩梦,所以我会建立一个新的测试应用程序,看看它是否在那工作...但它导致休眠问题说我MyUserDetails有错误的列数...我一遍又一遍地看完了,一切正常...... – Steve 2012-01-25 21:25:58