나는 @PeterK처럼 해결하지만, 일부 수정
public List<MyUser> listUsers() {
LOG.info("listUsers() inicio");
List<MyUser> users = new ArrayList<MyUser>();
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CTX);
env.put(Context.PROVIDER_URL, 'ldap://192.168.10.10:389');
env.put(Context.SECURITY_AUTHENTICATION, CONNECTION_TYPE);
env.put(Context.SECURITY_PRINCIPAL, USER_ADMIN_PASSWORD);
env.put(Context.SECURITY_CREDENTIALS, USER_ADMIN);
try {
LdapContext ctx = new InitialLdapContext(env, null);
// Activate paged results
int pageSize = 1000;
byte[] cookie = null;
ctx.setRequestControls(new Control[] { new PagedResultsControl(pageSize, Control.NONCRITICAL) });
int total;
do {
/* perform the search */
SearchControls sc = new SearchControls();
sc.setSearchScope(SearchControls.SUBTREE_SCOPE);
String filtro = "(&(sAMAccountName=*)&(objectClass=user))";
NamingEnumeration results = ctx.search(getBaseDn(ctx), filtro, sc);
/* for each entry */
while (results.hasMoreElements()) {
SearchResult result = (SearchResult) results.nextElement();
Attributes attributes = result.getAttributes();
//convert to MyUser class
MyUser user = toUser(attributes);
users.add(user);
}
// 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();
if (total != 0) {
System.out.println("***************** END-OF-PAGE " + "(total : " + total + ") *****************\n");
} else {
System.out.println("***************** END-OF-PAGE " + "(total: unknown) ***************\n");
}
cookie = prrc.getCookie();
}
}
} else {
System.out.println("No controls were sent from the server");
}
// Re-activate paged results
ctx.setRequestControls(new Control[] { new PagedResultsControl(pageSize, cookie, Control.CRITICAL) });
} while (cookie != null);
ctx.close();
} catch (NamingException e) {
System.err.println("PagedSearch failed.");
e.printStackTrace();
} catch (IOException ie) {
System.err.println("PagedSearch failed.");
ie.printStackTrace();
} catch (Exception ie) {
System.err.println("PagedSearch failed.");
ie.printStackTrace();
}
LOG.info("listUsers() size = " + (users.size()));
LOG.info("listUsers() fim");
return users;
}
private MyUser toUser(Attributes attributes) throws NamingException {
if (attributes != null) {
String fullName = attributes.get("distinguishedName") != null ? attributes.get("distinguishedName").get().toString() : null;
String mail = attributes.get("mail") != null ? attributes.get("mail").get().toString() : null;
String userName = attributes.get("cn") != null ? attributes.get("cn").get().toString() : null;
String userPrincipalName = attributes.get("userPrincipalName") != null ? attributes.get("userPrincipalName").get().toString() : null;
if (userPrincipalName != null) {
String[] user = userPrincipalName.split("@");
if (user != null && user.length > 0) {
userName = user[0];
}
}
MyUser user = new MyUser();
user.setFullName(fullName);
user.setEmail(mail);
user.setName(userName);
user.setUserPrincipalName(userPrincipalName);
user.setRoles(getRolesUser(attributes));
return user;
}
return null;
}
으로는 (단순 페이지 된 결과 제어)했다! 정말 고마워 ! – stage