无法将用户添加到Java中具有Ldap的组

时间:2014-01-21 16:30:21

标签: java spring exception active-directory ldap

我是使用Ldap API for Java的新手,我想将一个用户添加到一个组,但我一直都在失败。

我正在使用此代码将特定用户添加到特定组:

private void insertUserToGroup(List<DistinguishedName> memberOf, DistinguishedName newUserDN) {
    try
    {
        // Loop all groups to put the user in.
        for(DistinguishedName groupDn : memberOf) {

            String encodedGroupDn = groupDn.encode(); // Example: "cn=GROUP_SKL, ou=roles"
            String encodedUserDn = newUserDN.encode(); // Example: "cn=user_dfh, ou=external"

            // Now. Add user to a group.
            ModificationItem member[] = new ModificationItem[1];
            member[0] = new ModificationItem(DirContext.ADD_ATTRIBUTE, new BasicAttribute("member", encodedUserDn));
            ldapTemplate.modifyAttributes(encodedGroupDn, member);
        }
    } catch ( InvalidAttributeValueException exc ) {
        throw exc;
    } catch ( NameAlreadyBoundException exc ) {
        throw exc;
    } catch ( NameNotFoundException exc ) {
        throw exc;
    } catch (Exception exc) {
        throw exc;
    }
}

输入参数是组列表和用户,您可以在示例注释中看到DistinguishedName的外观。

1。当我运行ldapTemplate.modifyAttributes(encodedGroupDn,member)时我得到的异常;是:

org.springframework.ldap.NameNotFoundException:[LDAP:错误代码32 - 00000525:NameErr:DSID-031A11CC,问题2001(NO_OBJECT),数据0,最佳匹配:     “” ];

嵌套异常是javax.naming.NameNotFoundException:[LDAP:错误代码32 - 00000525:NameErr:DSID-031A11CC,问题2001(NO_OBJECT),数据0,最佳匹配:         “” ];

剩余名称'cn = GROUP_SKL,ou = roles'

2. 我曾尝试使用其他属性(如“description”,“company”)运行modifyAttributes(...),这对于组和用户都有效,但不适用于“成员”属性。

3。所以问题是。它期望什么名字? DistinguishedName是错的吗?或者这种方式将用户添加到组完全错误?或者是我遗漏的一些细节?

1 个答案:

答案 0 :(得分:1)

现在我发现了错误。

我只需要使用用户DN的完整地址。所以我认为该组的'member'属性必须具有完整的地址。所以DN现在看起来都是这样的:

encodedGroupDn =“cn = GROUP_SKL,ou = roles”

encodedUserDn =“cn = user_dfh,ou = external,ou = main,dc = nr,dc = company,dc = local”

这有效!