- 326 Views
- 0 Comments
General ECM Questions
Retrieve all users in LDAP Group
FunMaster
- Post By FunMaster
- 1 year 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 {
// đš Base DN (update as per your environment)
static String baseDN = "DC=Company,DC=internal";
private static DirContext directoryContext = null;
/**
* đš Initialize LDAP Connection
*/
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");
// â ī¸ Update credentials
config.put(Context.SECURITY_PRINCIPAL, "CN=UserName");
config.put(Context.SECURITY_CREDENTIALS, "Password");
return new InitialDirContext(config);
}
/**
* đš Fetch Users from LDAP Group
*/
public void fetchUsersInGroup(String base,
String filter,
String[] attributesToReturn,
int limit) {
Hashtable<String, String> foundUsers = new Hashtable<>();
try {
// đš Search Configuration
SearchControls searchControls = new SearchControls();
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
searchControls.setReturningAttributes(attributesToReturn);
directoryContext = initializeLdapContext();
try {
System.out.println("====================================");
System.out.println("Using Base DN : " + base);
System.out.println("Search Filter : " + filter);
System.out.println("====================================");
NamingEnumeration<SearchResult> results =
directoryContext.search(base, filter, searchControls);
if (!results.hasMore()) {
System.out.println("â No entries found for 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");
continue;
}
try {
NamingEnumeration<? extends Attribute> allAttrs = attributes.getAll();
while (allAttrs.hasMore()) {
Attribute attr = allAttrs.next();
String attrID = attr.getID();
NamingEnumeration<?> values = attr.getAll();
while (values.hasMore()) {
String value = (String) values.next();
if ("member".equalsIgnoreCase(attrID)) {
System.out.println("đ¤ Group Member : " + value);
} else {
System.out.println("âšī¸ " + attrID + " : " + value);
}
}
}
} catch (NamingException e) {
System.err.println("â Error processing attributes: " + e.getMessage());
}
counter++;
}
} catch (NamingException searchError) {
System.err.println("â LDAP search failed: " + searchError.getMessage());
}
// đš Close connection
directoryContext.close();
directoryContext = null;
} catch (Exception e) {
System.err.println("â Error retrieving group members: " + e.getMessage());
}
}
/**
* đš Main Method (Execution Entry)
*/
public static void main(String[] args) throws Exception {
LdapGroupUserFetcher fetcher = new LdapGroupUserFetcher();
// Attributes to fetch
String[] attrs = {"cn", "member", "name"};
// đš Group Filter (update accordingly)
String groupFilter = "CN=GroupName";
// đš Execute
fetcher.fetchUsersInGroup(baseDN, groupFilter, attrs, 2000);
}
}
Login To Post Your Comment