我正在使用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']
有办法吗?
答案 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