我在RFC 4515之前提供了 LDAP 搜索过滤器的字符串表示形式。我还查看了UnboundId SDK for Java的API,但我不清楚当我希望我的查询获取一个,最多 LDAP条目时,最好的习惯用法是什么。我已经考虑过在 LDAP 查询中使用该条目的 DN 作为 base 但是,过滤使得真的没有意义,我必须使用一个设计的无意义过滤器,对于已经在搜索 base 中指示的条目进行设计,评估为真。即似乎没有 alwaysTrue 过滤器在协议中使用。
答案 0 :(得分:3)
如果已知专有名称,请使用专有名称作为基础对象,使用SearchScope.BASE
,使用(&)
(或objectClass=*
)过滤器并提供属性列表客户要求。例如:
// exception handling not shown
final LDAPConnection conn = new LDAPConnection(host,port);
// some broken servers do not understand the legal filter '(&)', if
// your directory is broken in this way, use 'objectClass=*' and
// an equality filter can be created like:
// Filter filter = Filter.createEqualityFilter("objectClass","*");
final SearchRequest req = new SearchRequest(dn,SearchScope.Sub,"(&)",SearchRequest.ALL_USER_ATTRIBUTES);
final SearchResult result = conn.search(req);
final List<SearchResultEntry> entries = result.getSearchEntries();
conn.close();
这将返回条目的所有用户属性。同样的事情可以通过以下方式实现:
// exception handling not shown
final LDAPConnection conn = new LDAPConnection(host,port);
final SearchResultEntry entry = conn.getEntry(dn);
conn.close();
如果已知专有名称,则第二种方法最简洁。如果客户希望指定要返回的属性列表,还有一个getEntry(String dn,String attributes ...)
方法。如果DN未知,则客户端必须搜索该条目,并在SearchResultEntry
中返回可分辨名称,每个搜索请求至少返回一个条目。
对于多个条目与过滤器匹配时,最多只能获取一个条目,LDAP客户端必须提供足够紧密的搜索范围并过滤以将结果缩小到所需的一个条目。这就是过滤器和范围的用途。