2012-07-26 128 views
2

我試圖讓一個DN用戶ID獲取DN在LDAP(可能不止一個)的用戶的時候我唯一的參數是用戶ID如何使用UnboundID LDAP SDK

也我使用UnboundID LDAP SDK,你可以看到:

public String getCustomerAdminDN(String uid) 
{ 

    String result =null; 
    String filter = "uid=" +uid; 
    try { 
     SearchResult searchResult = this.ldapConnection.search("",SearchScope.SUB,filter); 

     result = searchResult.getMatchedDN(); 
    } catch (LDAPSearchException e) { 
     throw new RuntimeException("Error in the searching query :" + e.getMessage()); 
    } 

    return result; 
} 

假設我的UID屬於從頭部

回答

4

在這種情況下,發出以下DN

感謝的是,「匹配DN「元素不是你想象的那樣。它不是符合搜索條件的條目的DN(實際上可能是零個,一個或多個條目)。如果操作的目標不存在,則可以提供響應的匹配的DN元素。對於搜索操作,如果您指定了不存在的搜索基準DN,則匹配的DN可能會指定您指定的實際存在於服務器中的最近條目的DN。例如,如果您指定的搜索條件DN爲「ou = nonexistent,dc = example,dc = com」,但不存在但條目「dc = example,dc = com」條目存在,則服務器可能會返回匹配的DN值「dc = example,dc = com」。

如果您的搜索與一個或多個條目相匹配,那麼(除非您使用搜索結果偵聽器,而您在上面提供的示例中不是這種情況),則可以通過getSearchEntries方法訪問匹配條目。例如:

List<SearchResultEntry> searchEntries = searchResult.getSearchEntries(); 
if (searchEntries.size() != 1) 
{ 
    // The search didn't match exactly one entry. 
} 
else 
{ 
    SearchResultEntry entry = searchEntries.get(0); 
    result = entry.getDN(); 
} 

此外,你應該從他們的字符串表示構建過濾器時一定要小心,當值的一部分可能來自用戶的輸入,因爲這可能會允許某種注入攻擊。 LDAP注入比SQL更加困難並且通常更加溫和,但它並非完全不存在。因此建議,而不是:

String filter = "uid=" + uid; 

你使用:

Filter filter = Filter.createEqualityFilter("uid", uid); 
相關問題