Lightweight Directory Access Protocol (LDAP)
Exemples
Exemple avec Java, en utilisant JNDI
Dans cet exemple, nous allons :
- Nous connecter à un annuaire Apache DS en tant qu'administrateur
- Lister les entrées de la hiérarchie ou=users,dc=example,dc=com qui sont des utilisateurs
- Fermer la connexion à l'annuaire proprement
Le code de cet exemple est le suivant :
package fr.umlv.ig2k.demo;
import java.util.Hashtable;
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;
/**
* Simple LDAP-JNDI Demo.
*
* @author Vivien Boistuaud
*/
public class LDAPJNDIDemo {
private DirContext ldapContext;
public static void main(String[] args) {
LDAPJNDIDemo demo = new LDAPJNDIDemo();
try {
demo.connect("ldap://localhost:10389", "uid=admin,ou=system", "secret");
} catch (NamingException e) {
System.err.println("Connection failed: " + e.getMessage());
return;
}
try {
NamingEnumeration<SearchResult> res =
demo.search("ou=users,dc=example,dc=com",
"(objectClass=inetOrgPerson)",
new String[] { "uid", "mail" });
while (res.hasMoreElements()) {
SearchResult result = res.nextElement();
System.out.println("Entry: DN=" + result.getName());
Attributes attr = result.getAttributes();
NamingEnumeration<? extends Attribute> attribueEnum = attr.getAll();
while (attribueEnum.hasMoreElements()) {
Attribute att = attribueEnum.nextElement();
System.out.println(att.getID() + " = " + att.size() + " value(s)");
for (int i=0; i < att.size(); ++i) {
System.out.println("==> " + att.get(i));
}
}
}
} catch (NamingException e) {
System.err.println("Error :" + e.getMessage());
try {
demo.disconnect();
} catch (NamingException ne) {
// Silently discarded, cannnot do anything if we cannt close connection
}
}
}
public void connect(String url, String userDN, String passwd) throws NamingException {
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, url); // LDAP Server URL (ldaps for SSL implicit encryption)
env.put(Context.SECURITY_AUTHENTICATION, "simple"); // Authentication type, can be SASL
env.put(Context.SECURITY_PRINCIPAL, userDN); // specify the username
env.put(Context.SECURITY_CREDENTIALS, passwd); // specify the password
/*
* Executing this command will do the connect and bind operations,
* and a NamingException will be thrown if credentials are incorrect.
*/
ldapContext = new InitialDirContext(env);
}
public void disconnect() throws NamingException {
ldapContext.close();
}
public NamingEnumeration<SearchResult> search(String base, String searchString, String[] returningAttributes) throws NamingException {
SearchControls ctrl = new SearchControls();
if (returningAttributes != null) {
ctrl.setReturningAttributes(returningAttributes);
}
return ldapContext.search(base, searchString, ctrl);
}
}
Exemple avec Java, en utilisant l'API jldap de Novell
Le même exemple que précédemment, mais avec JLDAP de Novell.
package fr.umlv.ig2k.demo;
import com.novell.ldap.LDAPAttribute;
import com.novell.ldap.LDAPAttributeSet;
import com.novell.ldap.LDAPConnection;
import com.novell.ldap.LDAPEntry;
import com.novell.ldap.LDAPException;
import com.novell.ldap.LDAPSearchResults;
public class JLDAPDemo {
public static void main(String[] args) {
LDAPConnection ldapConnection = new LDAPConnection();
try {
ldapConnection.connect("localhost", 10389);
ldapConnection.bind(LDAPConnection.LDAP_V3, "uid=admin,ou=system",
"secret".getBytes());
LDAPSearchResults results = ldapConnection.search(
"ou=users,dc=example,dc=com", LDAPConnection.SCOPE_SUB,
"(objectClass=inetOrgPerson)",
new String[] { "uid", "mail" }, false);
while (results.hasMore()) {
LDAPEntry entry = results.next();
System.out.println("Entry DN:" + entry.getDN());
System.out.println("Attributes :");
LDAPAttributeSet set = entry.getAttributeSet();
for (Object attObject : set) {
LDAPAttribute att = (LDAPAttribute) attObject;
String[] values = att.getStringValueArray();
System.out.println(" Att. " + att.getName() + " has "
+ values.length + " value(s)");
for (int i = 0; i < values.length; ++i) {
System.out.println(" --- " + values[i]);
}
}
}
} catch (LDAPException e) {
System.err.println("Error : " + e.getMessage());
} finally {
try {
ldapConnection.disconnect();
} catch (LDAPException e) {
// Ignore this error safely in our case...
}
}
}
}