我是使用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是错的吗?或者这种方式将用户添加到组完全错误?或者是我遗漏的一些细节?
答案 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”
这有效!