HOWTO
- https://devconnected.com/how-to-search-ldap-using-ldapsearch-examples/
- https://www.forumsys.com/tutorials/integration-how-to/ldap/online-ldap-test-server/
- https://gist.github.com/bbuecherl/9431c03c71e5780fb328
LDAP test server
LDAP Server Information (read-only access):
Server: ldap.forumsys.com
Port: 389
Bind DN: cn=read-only-admin,dc=example,dc=com
Bind Password: password
All user passwords are password.
Search using test server
[dave@dave git]$ ldapsearch -W -h ldap.forumsys.com -D "cn=read-only-admin,dc=example,dc=com" -b "dc=example,dc=com""uid=Newton"
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=com> with scope subtree
# filter: uid=Newton
# requesting: ALL
#
# newton, example.com
dn: uid=newton,dc=example,dc=com
sn: Newton
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
uid: newton
mail: newton@ldap.forumsys.com
cn: Isaac Newton
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
Select attributes [dave@dave git]$ ldapsearch -W -h ldap.forumsys.com -D "cn=read-only-admin,dc=example,dc=com" -b "dc=example,dc=com""uid=Newton" mail
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=com> with scope subtree
# filter: uid=Newton
# requesting: mail
#
# newton, example.com
dn: uid=newton,dc=example,dc=com
mail: newton@ldap.forumsys.com
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
Search using Java https://github.com/dveselka/java-tutorial/blob/master/src/main/java/ldap/TestLDAP.javapackage ldap;
import java.util.ArrayList;
import java.util.Properties;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attributes;
import javax.naming.directory.Attribute;
import javax.naming.Context;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
public class TestLDAP {
private static final String CONTEXT_FACTORY = "com.sun.jndi.ldap.LdapCtxFactory";
private InitialDirContext ctx;
private String basedn;
private SearchControls ctrls;
private TestLDAP(String url, String user, String password, String b) throws NamingException {
ctx = TestLDAP.doConnect(url, user, password);
basedn = b.length() > 0 ? "," + b : b;
ctrls = new SearchControls();
}
public ArrayList<Attributes> search(String base, String filter) throws NamingException {
NamingEnumeration<SearchResult> ne = ctx.search(base + basedn, filter, ctrls);
ArrayList<Attributes> arr = new ArrayList<>();
while (ne.hasMore()) {
arr.add(ne.next().getAttributes());
}
return arr;
}
public Attributes get(String base) throws NamingException {
return ctx.getAttributes(base + basedn);
}
private static InitialDirContext doConnect(String url, String user, String password) throws NamingException {
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, CONTEXT_FACTORY);
props.put(Context.PROVIDER_URL, url);
props.put(Context.SECURITY_PRINCIPAL, user);
props.put(Context.SECURITY_CREDENTIALS, password);
return new InitialDirContext(props);
}
public static TestLDAP connect(String url, String user, String pass, String basedn) throws NamingException {
return new TestLDAP(url, user, pass, basedn);
}
public static boolean testConnection(String url, String user, String password) {
try {
return TestLDAP.doConnect(url, user, password) != null;
} catch (Exception e) {
return false;
}
}
public static void main(String[] args) {
try {
TestLDAP testLDAP = new TestLDAP("ldap://ldap.forumsys.com", "cn=read-only-admin,dc=example,dc=com",
"password", "dc=example,dc=com");
Attributes attributes = testLDAP.get("uid=Newton");
NamingEnumeration<? extends Attribute> allAttributes = attributes.getAll();
while (allAttributes.hasMore()) {
Attribute attribute = allAttributes.next();
System.out.println(attribute.getID() + "=" + attribute.get().toString());
}
} catch (NamingException e) {
e.printStackTrace();
}
}
}
Run code in Eclipse