Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用Java中的Ldap将用户添加到组_Java_Spring_Exception_Active Directory_Ldap - Fatal编程技术网

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

无法使用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

我对使用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;
    }
}
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”等。