2013-06-26 1 views
0

An article about best practices in LDAP searches состояния:Как установить ограничение на размер клиентского запроса LDAP в Java?

Программисты должны всегда обеспечивать клиента запрошенных предельный размер.

Как это можно сделать на Java? Я не могу найти подходящий вариант в documentation.

Может ли кто-нибудь дать мне подсказку?

ответ

2

Если клиент использует UnboundID LDAP SDK:

SearchRequest req = new SearchRequest(baseObject,scope,filter,requestedAttributes); 
req.setSizeLimit(maxNumberOfEntriesToReturn); 

Если клиент использует JNDI, используйте setCountLimit, и рассмотреть вопрос об использовании UnboundID LDAP SDK вместо JNDI для нового кода.

+0

Я использую 'Java (TM) SE Runtime Environment (сборка 1.7.0_15-B03)' от Oracle. – ceving

+0

Не имеет значения, какая версия. JNDI уже более десяти лет встроена в Java, и API в то время практически не изменился. – EJP

+0

@EJP Но SDK UnboundID LDAP кажется заменой для JNDI, не так ли? – ceving

0

.setSizeLimit() не помогает увеличить ограничение размера сервера.

и этот код также

   SearchControls ctls = new SearchControls(); 
       ctls.setCountLimit(99000); 

Вы должны использовать режим подкачки.

public static void main(String[] args) { 

try { 
    int count = 0; 
    LDAPConnection connection = new LDAPConnection("hostname", 389, "[email protected]", "password"); 

    final String path = "OU=Users,DC=org,DC=com"; 
    String[] attributes = {"SamAccountName","name"}; 

    SearchRequest searchRequest = new SearchRequest(path, SearchScope.SUB, Filter.createEqualityFilter("objectClass", "person"), attributes); 

    ASN1OctetString resumeCookie = null; 
    while (true) 
    { 
     searchRequest.setControls(
       new SimplePagedResultsControl(100, resumeCookie)); 
     SearchResult searchResult = connection.search(searchRequest); 
     for (SearchResultEntry e : searchResult.getSearchEntries()) 
     { 
      if (e.hasAttribute("SamAccountName")) 
       System.out.print(count++ + ": " + e.getAttributeValue("SamAccountName")); 

      if (e.hasAttribute("name")) 
       System.out.println("->" + e.getAttributeValue("name")); 
     } 

     LDAPTestUtils.assertHasControl(searchResult, 
       SimplePagedResultsControl.PAGED_RESULTS_OID); 
     SimplePagedResultsControl responseControl = 
       SimplePagedResultsControl.get(searchResult); 
     if (responseControl.moreResultsToReturn()) 
     { 
      resumeCookie = responseControl.getCookie(); 
     } 
     else 
     { 
      break; 
     } 
    } 


} 
catch (Exception e) 
{ 
    System.out.println(e.toString()); 
} 

}

Смежные вопросы