2

LDAP検索フィルターの文字列表現を提供するRFC4515が私の前にあります。UnboundId SDK for JavaのAPIも調べましたが、クエリで1つ、多くてもLDAPエントリをフェッチすることを期待するときに使用するのに最適なイディオムが何であるかはわかりません。そのエントリのDNをLDAPクエリのベースとして使用することを考えましたが、フィルタリングは実際には意味がなく、設計上、すでに示されているエントリに対してtrueと評価されるナンセンスフィルターを使用する必要があります。検索ベースつまり、プロトコルで使用するalwaysTrueフィルターはないようです。

4

1 に答える 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();

識別名がわかっている場合は、2番目の方法が最も簡潔です。getEntry(String dn,String attributes ...)クライアントが返す属性のリストを指定したい場合のメソッドもあります。DNが不明な場合、クライアントはエントリを検索する必要があり、SearchResultEntry少なくとも1つのエントリを返すすべての検索要求で識別名が返されます。

複数のエントリがフィルタに一致する場合に最大で1つのエントリをフェッチする場合、LDAPクライアントは、結果を必要な1つのエントリに絞り込むために、十分に狭い検索範囲とフィルタを提供する必要があります。それがフィルターとスコープの目的です。

于 2012-09-29T21:07:27.520 に答える