2014-01-21 54 views
0

我是使用Ldap API for Java的新用戶,我想將用戶添加到組中,但我一直失敗。無法將用戶添加到Java中具有Ldap的組

我使用這個代碼添加特定用戶的特定組:

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 =角色'

2.我試圖運行包含 「描述」, 「公司」 和其他屬性的modifyAttributes(...)適用於組和用戶,但不適用於屬性「member」。

3.所以問題是。它期望什麼名字? DistinguishedName是否錯誤?或者是這種方式來添加一個用戶到一個完全錯誤的組?或者是我缺少的一些細節?

+0

'cn = GROUP_SKL,ou = roles'不是完整的DN。您需要將整個DN提供到樹的根目錄。用戶DN也一樣。否則,確保'ldapTemplate'是樹中這些名稱的起始點。 – EJP

+0

我已經配置ldapTemplate這個基地: ou = main,dc = nr,dc = company,dc = local LdapTemplate不應該配置錯誤,因爲我可以創建用戶並更改像「company」等用戶屬性等等。 – Alexander

回答

0

現在我發現了錯誤。

我只需要使用用戶DN的完整地址。所以我認爲該組的「成員」屬性必須具有完整的地址。因此,無論DN現在看起來是這樣的:

encodedGroupDn = 「CN = GROUP_SKL,OU =角色」

encodedUserDn =「CN = user_dfh,OU =外部,OU =主,DC = NR,DC =公司,dc =本地「

而且工作!