无法使用Java中的Ldap将用户添加到组
我对使用Ldap API for Java是一个新手,我想向组中添加一个用户,但我总是失败 我使用此代码将特定用户添加到特定组:无法使用Java中的Ldap将用户添加到组,java,spring,exception,active-directory,ldap,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(Distinguis
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;
}
}
private void insertUserToGroup(列表成员,区分名称newUserDN){
尝试
{
//循环所有组以将用户放入其中。
for(区分名称groupDn:memberOf){
字符串encodedGroupDn=groupDn.encode();//示例:“cn=GROUP_SKL,ou=roles”
字符串encodedUserDn=newUserDN.encode();//示例:“cn=user\u dfh,ou=external”
//现在。将用户添加到组。
ModificationItem成员[]=新的ModificationItem[1];
成员[0]=新的修改项(DirContext.ADD_属性,新的基本属性(“成员”,encodedUserDn));
ldapTemplate.modifyAttributes(encodedGroupDn,成员);
}
}catch(invalidateTributeValueException exc){
抛出exc;
}catch(NameReadyBoundException exc){
抛出exc;
}捕获(NameNotFoundException exc){
抛出exc;
}捕获(异常exc){
抛出exc;
}
}
输入参数是组和用户的列表,您可以在示例注释中看到DifferentiedName的外观
1.以及运行ldapTemplate.modifyAttributes(encodedGroupDn,member)时得到的异常;是:
org.springframework.ldap.NameNotFoundException:[ldap:错误代码32-00000525:NameErr:DSID-031A11CC,问题2001(无对象),数据0,最佳匹配:
''
];强>
嵌套异常为javax.naming.NameNotFoundException:[LDAP:错误代码32-00000525:NameErr:DSID-031A11CC,问题2001(无对象),数据0,最佳匹配:
''
];强>
剩余名称'cn=GROUP\u SKL,ou=roles'
2.我尝试使用其他属性(如“描述”、“公司”)运行modifyAttributes(…),该属性适用于组和用户,但不适用于属性“成员”
3.所以问题是。它应该叫什么名字?区分名称有误吗?或者这种将用户添加到组的方式完全错误?还是我遗漏了一些细节?现在我发现了错误
我所需要的只是使用用户DN的完整地址。因此,我认为组的“member”属性必须具有完整地址。现在两个DN都是这样的:
encodedGroupDn=“cn=GROUP_SKL,ou=roles”
encodedUserDn=“cn=user\u dfh,ou=external,ou=main,dc=nr,dc=company,dc=local”
这就行了 “cn=GROUP\u SKL,ou=roles”不是一个完整的DN。您需要提供整个DN,直到树的根。用户DN也是如此。或者确保“ldapTemplate”是树中这些名称的起始点。我已使用以下基配置了ldapTemplate:ou=main、dc=nr、dc=company、dc=local。ldapTemplate的配置不应错误,因为我可以创建用户并更改用户属性,如“company”等。