我面前有RFC 4515 ,它提供了LDAP搜索过滤器的字符串表示。我还研究了UnboundId SDK for Java的 API,但是当我希望我的查询最多获取一个LDAP 条目时,我不清楚使用什么最佳习惯用法。我曾考虑在LDAP查询中使用该条目的DN作为基础,但是过滤实际上没有任何意义,我必须使用人为设计的无意义过滤器,对于已经在搜索基地。即在协议中似乎没有alwaysTrue过滤器可以使用。
问问题
2112 次
1 回答
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 客户端必须提供足够紧密的搜索范围和过滤器以将结果缩小到所需的一个条目。这就是过滤器和范围的用途。
于 2012-09-29T21:07:27.520 回答