2012-07-26 2 views
2

UnboundID LDAP SDK를 사용하여 사용자 ID와 LDAP에서 DN을 얻는 방법을 사용자의 (하나 이상이 될 수 있음) 당신이 볼 수 있듯이 내가 UnboundID LDAP SDK를 사용하고 있습니다 :나는 DN을 얻으려고

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이 아닙니다 (사실 0, 하나 또는 여러 항목이 될 수 있음). 작업의 대상이 존재하지 않으면 응답의 일치 DN 요소가 제공 될 수 있습니다. 검색 작업의 경우 존재하지 않는 검색 기반 DN을 지정한 경우 일치하는 DN은 서버에 실제로 존재하는 지정한 항목과 가장 가까운 항목의 DN을 지정할 수 있습니다. 예를 들어 존재하지 않지만 "dc = example, dc = com"항목이 존재하는 "ou = nonexistent, dc = example, dc = com"의 검색 기본 DN을 지정한 경우 서버 일치하는 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); 
관련 문제