簡體   English   中英

如何使用UnboundID LDAP SDK在LDAP中使用用戶ID獲取DN

[英]how to get DN in LDAP with user ID using UnboundID LDAP SDK

當我擁有的唯一參數是user-id時,我正在嘗試獲取用戶的DN(可能不止一個)

我也正在使用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屬於以下DN

謝謝你的頭腦

在這種情況下的問題是“匹配的DN”元素不是您認為的那樣。 它不是符合搜索條件的條目的DN(實際上可能是零,一個或多個條目)。 如果操作的目標不存在,則可以提供響應的匹配的DN元素。 對於搜索操作,如果您指定了不存在的搜索庫DN,則匹配的DN可能會指定與您指定的實際存在於服務器中的最近條目的DN。 例如,如果您指定的搜索基准DN為“ou =不存在,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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM