Я пытаюсь получить всех пользователей из активного каталога LDAP, и он не возвращает всех пользователей один раз, поскольку максимальный размер, возвращаемый сервером ldap, равен 1000.
Поэтому я использую PagedResultsControl, чтобы получить всех пользователей с сервера LDAP.как пагинация.
Пример кода, как показано ниже:
// Activate paged results
int pageSize = 20; // 20 entries per page
byte[] cookie = null;
int total;
ctx.setRequestControls(new Control[]{new PagedResultsControl(pageSize, Control.CRITICAL) });
do {
System.out.println("Processing ...");
// Perform the search
NamingEnumeration results =
ctx.search("DC=test,DC=local", "(objectclass=*)", new SearchControls());
// Iterate over a batch of search results
while (results != null && results.hasMore()) {
// Display an entry
SearchResult entry = (SearchResult)results.next();
System.out.println(entry.getName());
//System.out.println(entry.getAttributes());
// Handle the entry's response controls (if any)
if (entry instanceof HasControls) {
// ((HasControls)entry).getControls();
}
}
// Examine the paged results control response
Control[] controls = ctx.getResponseControls();
if (controls != null) {
for (int i = 0; i < controls.length; i++) {
if (controls[i] instanceof PagedResultsResponseControl) {
PagedResultsResponseControl prrc =
(PagedResultsResponseControl)controls[i];
total = prrc.getResultSize();
cookie = prrc.getCookie();
} else {
// Handle other response controls (if any)
}
}
}
// Re-activate paged results
ctx.setRequestControls(new Control[]{
new PagedResultsControl(pageSize, cookie, Control.CRITICAL) });
} while (cookie != null);
Вышеупомянутый код не работает, и его цикл выполняется только один раз, но при поиске без этого PagedResultsControl получает больше записей.
Может кто-нибудь, пожалуйста, помогите в этом.