2012-07-26 118 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); 
相关问题