如何使用UnboundID LDAP SDK在具有用户ID的LDAP中获取DN



当我唯一的参数是用户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=incorporous,dc=example,dc=com",该DN不存在,但条目"dc=example,dc=cm"确实存在,则服务器可能会返回一个匹配的DN值"dc=sample,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);

最新更新