如何检索LDAP数据库上的所有LDAP属性定义?

时间:2016-07-21 06:50:38

标签: java ldap

我正在使用ldap并希望检索在Ldap服务器上定义的所有Ldap属性字段。我只需要属性字段列表而不是值。结果应该是这样的列表:

['mailNickname',
 'publicDelegatesBL',
 'logonCount',
 'cn',
 'countryCode',
 'dSCorePropagationData',
 'objectClass',
 # ...
'telephoneNumber',
'physicalDeliveryOfficeName',
'name',
'memberOf',
'codePage',
'userAccountControl',
'msExchMDBRulesQuota',
'lastLogon',
'protocolSettings',
'uSNChanged',
'sn',
'msExchVersion',
'mDBUseDefaults',
'givenName',
'msExchMailboxGuid',
'lastLogoff']

有办法吗?

4 个答案:

答案 0 :(得分:0)

不建议LDAP为您返回所有属性,建议您通过SearchControl设置您感兴趣的属性数组。

答案 1 :(得分:0)

您可以枚举特定对象的所有属性(例如您的用户)并将其添加到列表中

// Get all the attributes of named object
Attributes attrs = ctx.getAttributes("cn=User1,ou=People");
List<String> l = new ArrayList<String>();
for (NamingEnumeration ae = attrs.getAll(); ae.hasMore();) {
    Attribute attr = (Attribute) ae.next();
    l.add(attr.getID()); 
}

示例:http://www.java2s.com/Code/Java/JNDI-LDAP/howtoretrieveallattributesofanamedobject.htm

答案 2 :(得分:0)

根据LDAP服务器实现,可以使用以下几种方法获取包含所有定义的属性(和ObjectClasses)的LDAP模式:http://ldapwiki.com/wiki/LDAP%20Query%20For%20Schema

如果你只想要属性。尝试类似:

ldapsearch -h yourLDAPDNS  -b "cn=schema" -s base -D cn=admin,ou=...,dc=yourdomain,dc=com -w secretpassword "(objectclass=*)" attributeTypes 

答案 3 :(得分:0)

您可以使用getSchema()并获取LDAP的树根模式

DirContext schema = yourLDAPctx.getSchema("");

然后,您还可以从Schema中选择所需的类的所有属性

DirContext personSchema = (DirContext)schema.lookup("ClassDefinition/<name of the objectClass>");

您可以参考此链接。它将更详细地告诉您

http://www.cs.binghamton.edu/~steflik/cs328/jndi/tutorial/ldap/schema/object.html