2013-06-26 31 views
0

An article about best practices in LDAP searches狀態:如何在Java中設置LDAP客戶端請求的大小限制?

程序員應該始終提供客戶端請求的大小限制。

這怎麼能在Java中完成?我在documentation找不到合適的選項。

有人可以給我一個提示嗎?如果客戶使用JNDI,使用setCountLimit,並考慮使用UnboundID LDAP SDK,而不是JNDI對新代碼

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

回答

2

如果客戶端使用LDAP UnboundID SDK。

+0

我使用'的Java(TM)SE運行時環境(建立1.7.0_15-B03)'從甲骨文。 – ceving

+0

它並沒有什麼區別什麼版本。 JNDI已經內置到Java中已有十多年了,在那個時候API幾乎沒有改變。 – EJP

+0

@EJP但是UnboundID LDAP SDK似乎是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()); 
} 

}

相關問題