- 17 Views
- 0 Comments
General ECM Questions
Retrieve all users in LDAP Group
FunMaster
- Post By FunMaster
- 1 week ago
import java.util.Hashtable;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
public class LdapGroupUserFetcher {
static String baseDN = "DC=Company,DC=internal";
private static DirContext directoryContext = null;
private static DirContext initializeLdapContext() throws Exception {
Properties config = new Properties();
config.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
config.put(Context.PROVIDER_URL, "ldap://localhost:389");
config.put(Context.SECURITY_AUTHENTICATION, "simple");
config.put(Context.SECURITY_PRINCIPAL, "CN=UserName");
config.put(Context.SECURITY_CREDENTIALS, "Password");
return new InitialDirContext(config);
}
public void fetchUsersInGroup(String base, String filter, String[] attributesToReturn, int limit) {
Hashtable<String, String> foundUsers = new Hashtable<>();
try {
SearchControls searchControls = new SearchControls();
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
searchControls.setReturningAttributes(attributesToReturn);
directoryContext = initializeLdapContext();
try {
System.out.println("Using Base DN: " + base);
System.out.println("Search Criteria: " + filter);
NamingEnumeration<SearchResult> results = directoryContext.search(base, filter, searchControls);
if (!results.hasMore()) {
System.out.println("No entries found matching filter: " + filter);
}
int counter = 0;
while (results.hasMore()) {
if (counter >= limit) break;
SearchResult result = results.next();
Attributes attributes = result.getAttributes();
if (attributes == null || attributes.size() == 0) {
System.out.println("No attributes found for: " + attributesToReturn[0]);
continue;
}
try {
for (NamingEnumeration<? extends Attribute> allAttrs = attributes.getAll(); allAttrs.hasMore();) {
Attribute attr = allAttrs.next();
String attrID = attr.getID();
for (NamingEnumeration<?> values = attr.getAll(); values.hasMore();) {
String value = (String) values.next();
if ("member".equalsIgnoreCase(attrID)) {
System.out.println("User member: " + value);
} else {
System.out.println("Non-member attribute: " + attrID + " -> " + value);
}
}
}
} catch (NamingException e) {
System.err.println("Error processing attributes: " + e.getMessage());
}
counter++;
}
} catch (NamingException searchError) {
System.err.println("Directory search failed: " + searchError.getMessage());
}
directoryContext.close();
directoryContext = null;
} catch (Exception e) {
System.err.println("Error retrieving group members from LDAP: " + e.getMessage());
}
}
public static void main(String[] args) throws Exception {
LdapGroupUserFetcher fetcher = new LdapGroupUserFetcher();
String[] attrs = {"cn", "member", "name"};
String groupFilter = "CN=GroupName";
fetcher.fetchUsersInGroup(baseDN, groupFilter, attrs, 2000);
}
}
Login To Post Your Comment