如何在Grails上使用LDAP插件?

4
我正在开始一个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. 安装安全核心和LDAP插件后,在运行“s2 quickstart”之后还需要做什么?
Groovy和Grails的事情使许多事情在后台进行,以至于一开始很难理解在哪里配置所有内容。
感谢您的帮助
编辑:我一直在寻找有关如何使用这些插件的信息,但我没有找到任何良好记录的信息,我找到了关于Acegi的信息,但该插件不再受支持,这就是我在这里提问的原因。
编辑:阅读此内容(我将看看是否能够使用LDAP):http://blog.springsource.com/2010/08/11/simplified-spring-security-with-grails/
2个回答

4

1. 我该如何将认证提供程序设置为LDAP服务器?

我相信这是激活LDAP身份验证的Config.groovy条目。

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

在运行“s2 quickstart”后安装安全核心和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) {
}

我曾经遇到过同样的问题。我认为这个方法帮助解决了我的问题。对这个答案点赞。 - Tung

0

我之前已经阅读过这份文档。我安装了LDAP插件,但似乎它没有使用该协议来管理安全性,你知道Acegi的useLdap的等效方法吗?看起来仅安装LDAP插件是不够的。 - Arturo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接