我需要从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=com
为objectCategory
时,我需要为任何Active Directory获取Person
。
您是否知道为查询(&(objectClass=user)(objectCategory=person))
创建过滤器的其他方法?
解决方案
(不是我的,因此不想回答)
我使用以下字符串(sAMAccountType=805306368)
创建了过滤器,它完美无缺:
Filter searchFilter = Filter.create("(sAMAccountType=805306368)");