2012-09-29 55 views
2

我有我之前RFC 4515,它提供的字符串表示形式LDAP搜索過濾器。我還查看了UnboundId SDK for Java的API,但我不清楚什麼是最好的習慣用法,當我期望我的查詢獲取一個,最多 LDAP條目時。我曾考慮過使用該條目的DN作爲的基地LDAP查詢,但然後,過濾真的沒有意義,我必須使用一個人爲的無意義過濾器,將設計,評估爲真該條目已經在搜索基地中指出。即似乎沒有alwaysTrue過濾器在協議中使用。LDAP搜索查詢以獲取一個特定的條目

回答

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客戶端必須提供足夠嚴格的搜索範圍和過濾器,以將結果縮小爲所需的一個條目。這就是過濾器和範圍的用途。