如何在Grails上使用LDAP插件?

时间:2010-10-27 16:23:21

标签: grails ldap

我正在开始一个关于Groovy和Grails的新项目。我现在正在处理身份验证部分,因为我们有一个LDAP服务器,我想使用LDAP进行身份验证。我开始设置我的环境,我使用的是SpringSource Tool Suite和 Grails 1.3.5 。当我开始使用身份验证部分时,我安装了两个插件:

  • springSecurityCore - 1.0.1
  • springSecurityLdap - 1.0.1

我还为LDAP插件运行了“s2 quickstart”命令。

一切看起来都很棒,我可以使用LoginController和LogoutController,我可以保护网页,只有在登录时才能看到它。我是通过在BootStrap.groovy创建用户来实现的。

我还在Config.groovy中配置了所有LDAP和Spring Security Core参数以及我们的LDAP服务器的相应值:

   grails.plugins.springsecurity.ldap.context.managerDn
   grails.plugins.springsecurity.ldap.context.managerPassword
   grails.plugins.springsecurity.ldap.context.server
   grails.plugins.springsecurity.ldap.authorities.groupSearchBase
   grails.plugins.springsecurity.ldap.search.base
   grails.plugins.springsecurity.userLookup.userDomainClassName
   grails.plugins.springsecurity.userLookup.authorityJoinClassName
   grails.plugins.springsecurity.authority.className

但是,我不知道如何测试LDAP服务器正在进行身份验证。我确定它没有使用LDAP,因为当我在应用程序运行时进入“登录”框并尝试使用我通常用于LDAP服务器的用户名和密码进行身份验证时,它说它无法找到用户。如果我尝试使用我在BootStrap.groovy上创建的用户进行身份验证,我可以登录,但我猜这个用户只是在本地创建,而且是暂时的。

  1. 如何将身份验证提供程序设置为LDAP服务器?
  2. 在运行“s2快速启动”后安装安全核心和ldap插件后还需要做些什么?
  3. Groovy和Grails的事情在背景上做了很多事情,在开始时很难理解在哪里配置所有内容。

    提前感谢您的帮助

    编辑:我一直在寻找有关如何使用这些插件的信息,但我没有找到任何记录良好的信息,我找到了有关Acegi的信息,但该插件不受支持不再,这就是我在这里问的原因

    编辑:阅读本文(我会看看是否可以使用LDAP):http://blog.springsource.com/2010/08/11/simplified-spring-security-with-grails/

2 个答案:

答案 0 :(得分:4)

  

1.如何将身份验证提供程序设置为LDAP服务器?

我很确定这是激活LDAP身份验证的Config.groovy条目。

grails.plugins.springsecurity.providerNames = ['ldapAuthProvider',
'anonymousAuthenticationProvider',
'rememberMeAuthenticationProvider']
  

2.在运行“s2快速启动”后安装安全核心和ldap插件后,我还需要做些什么?

我发现这个讨论非常有用:CustomUserDetailsService。结果是这个方法在UserDetailsContextMapper:

的扩展中
UserDetails mapUserFromContext(org.springframework.ldap.core.DirContextOperations ctx,
    java.lang.String username,
    java.util.Collection<GrantedAuthority> authority) {

    User.withTransaction { status ->

        def user = getUser(ctx)  // Creates and saves a MyUser domain class instance


        def userDetails = new MyUserDetails(
                    username,
                    authority ?: NO_ROLES,
                    user.id, 
                    user.name,
                    user.mail)

        userDetails.fullname = user.name
        userDetails.email = user.mail

        return userDetails

    }

}

我认为这个resources.groovy条目是必要的:

beans = {
ldapUserDetailsMapper(MyUserDetailsContextMapper) {
}

答案 1 :(得分:0)

这两个插件在以下位置都有相当多的文档:

http://burtbeckwith.github.com/grails-spring-security-core/docs/manual/index.html http://burtbeckwith.github.com/grails-spring-security-ldap/docs/manual/index.html