2012-01-04 187 views
2

我正在使用Spring LDAP 1.3.0使用Java訪問內部LDAP服務器的庫,但我遇到了一個麻煩事情:如何獲取內部屬性LDAP的任何結構?例如,我如何獲得用戶的成員的屬性?使用Spring LDAP獲取內部屬性

我曾經搜索了很多,但沒有找到有關使用Spring LDAP的任何內容。 任何想法都將非常受歡迎。謝謝。

+0

我找到了一種方法,這是非常簡單的。示例: _getLdapTemplate()。search(「dc = MY_COMPANY,dc = com,dc = br」,「(&(objectClass = person)(uid = USER_UID))」,SearchControls.SUBTREE_SCOPE,new String [] {觀察:在這段代碼中,** UserAttributeMapper **只是我自己實現的** org.springframework.ldap.core.AttributesMapper **。 – 2012-01-04 18:25:02

回答

0

它也適用於odmManager。喜歡的東西

DistinguishedName dn = new DistinguishedName("The path your are searching in"); 
SearchControls searchControls = new SearchControls(); 
searchControls.setReturningObjFlag(true); 
searchControls.setReturningAttributes("your attributes, as an array of strings"); 
return odmManager.findAll(User.class, dn, searchControls); 

我用這個來得到「createTimestamp」領域....

3

正如你在評論說UserAttributeMapper是你的朋友!

如果用戶有多個「的memberOf」:

static List<List<String>> getPersonGroupsByAccountName(String accountName){ 

    EqualsFilter filter = new EqualsFilter("sAMAccountName", accountName); 
    return ldap.search(DistinguishedName.EMPTY_PATH,filter.encode(),new AttributesMapper(){ 
     public Object mapFromAttributes(
       javax.naming.directory.Attributes attrs) 
     throws javax.naming.NamingException { 
      List<String> memberof = new ArrayList(); 
      for (Enumeration vals = attrs.get("memberOf").getAll(); vals.hasMoreElements();) { 
       memberof.add((String)vals.nextElement()); 
      } 
      return memberof; 
     } 
    }); 

我敢肯定有一個更好的方式來做到這一點,但它的工作原理。

+0

謝謝!在所有帖子的搜索結果中,這是唯一對我有用的。 +1。 – BillFromHawaii 2014-10-21 16:42:52

+0

我很高興這對你有幫助! – fdelsert 2014-10-21 18:52:38