如何使用Unboundid LDAP SDK从Active Directory获取用户?

时间:2015-03-15 20:16:08

标签: active-directory unboundid-ldap-sdk

我需要从Active Directory中获取用户。 根据许多地方包括MSDN

https://msdn.microsoft.com/en-us/library/ms677643%28v=vs.85%29.aspx

正确的查询是(&(objectClass=user)(objectCategory=person))

不幸的是,我无法使用Unboundid过滤器创建查询。

我创建了以下过滤器:

Filter categoryFilter = Filter.createEqualityFilter("objectCategory","Person");
Filter objectFilter = Filter.createEqualityFilter("objectClass","user");
Filter searchFilter = Filter.createANDFilter(objectFilter, categoryFilter);

它不会返回结果。 当我查看LDAP对象的objectCategory时,我发现它看起来如下所示:

CN=Person,CN=Schema,CN=Configuration,DC=…,DC=com

因此我将categoryFilter更改为以下内容:

Filter categoryFilter = Filter.createSubstringFilter("objectCategory", null, new String[]{"Person"}, null);

不幸的是,我仍然没有得到结果。

然后我使用了带有完整objectCategory名称的categoryFilter:

Filter categoryFilter = Filter.createEqualityFilter("objectCategory","CN=Person,CN=Schema,CN=Configuration,DC=…,DC=com"); 

只有在最后一种情况下,我才能得到结果。

如何使过滤器更通用? 如何从Active Directory获取完整的objectCategory名称?

我知道CN=Person,CN=Schema,CN=Configuration,DC=…,DC=comobjectCategory时,我需要为任何Active Directory获取Person

您是否知道为查询(&(objectClass=user)(objectCategory=person))创建过滤器的其他方法?

解决方案

(不是我的,因此不想回答)

我使用以下字符串(sAMAccountType=805306368)创建了过滤器,它完美无缺:

Filter searchFilter =  Filter.create("(sAMAccountType=805306368)");

来源:http://ldapwiki.com/wiki/Active%20Directory%20User%20Related%20Searches#section-Active+Directory+User+Related+Searches-AllUsers

0 个答案:

没有答案