Snippet #3 ~ se connecter à un annuaire LDAP en Java

j’ai récemment eu à me connecter à l’active directory de mon travail en JAVA afin d’y récupérer des informations sur les utilisateurs windows de mon entreprise. Mon projet JAVA devais , a partir d’un nom et d’un prénom, récupérer le compte Active directory et copier ses informations dans une base de donnée propre au projet.

Comme ce fût laborieux de trouver un code correct et sans ambiguitées, je vous le publie ici et vous le commente:

package principal;

import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;

public class LDAP {

	public static void main(String[] args) {

		//Adresse du serveur sur lequel se trouve l'annuaire LDAP
		String serverIP = "172.17.10.250";
		//Pourt du serveur sur lequel se trouve l'annuaire LDAP
		String serverPort = "389";
		//Login de connexion à l'annuaire LDAP : Le login dois être sous forme de "distinguished name"
		//ce qui signifie qu'il dois être affiché sous la forme de son arborescence LDAP
		String serverLogin = "CN=CARRUESCO Valentin,OU=UTILISATEURS,DC=idleman,DC=fr";
		//Mot de passe de connexion à l'annuaire LDAP
		String serverPass = "motDePasseSecret";

		//On remplis un tableau avec les parametres d'environement et de connexion au LDAP
		Hashtable environnement = new Hashtable();
		environnement.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
		environnement.put(Context.PROVIDER_URL, "ldap://"+serverIP+":"+serverPort+"/");
		environnement.put(Context.SECURITY_AUTHENTICATION, "simple");
		environnement.put(Context.SECURITY_PRINCIPAL, serverLogin);
		environnement.put(Context.SECURITY_CREDENTIALS, serverPass);
		try {
			//On appelle le contexte à partir de l'environnement
			DirContext contexte = new InitialDirContext(environnement);
			//Si ça ne plante pas c'est que la connexion est faite
			System.out.println("Connexion au serveur : SUCCES");
			try {
				//On recupere l'attribut de DUPONT JEAN
				Attributes attrs = contexte.getAttributes("CN=DUPONT JEAN,OU=UTILISATEURS,DC=idleman,DC=fr");
				System.out.println("Recuperation de dupont : SUCCES");
				//On affiche le nom complet de dupont
				System.out.println(attrs.get("name"));
				//On affiche le mail de dupont
				System.out.println(attrs.get("mail"));
				//On affiche le service de dupont
				System.out.println(attrs.get("department"));

			} catch (NamingException e) {
				System.out.println("Recuperation de dupont : ECHEC");
				e.printStackTrace();
			}
		} catch (NamingException e) {
			System.out.println("Connexion au serveur : ECHEC");
			e.printStackTrace();
		}
	}
}

11 réactions au sujet de « Snippet #3 ~ se connecter à un annuaire LDAP en Java »

  1. Tumeconnais Réponse

    merci ca m’a bien aidé 🙂
    si vous voulez enlevez l’authentification :
    environnement.put(Context.SECURITY_AUTHENTICATION, “none”); //on remplace simple par none est on supprime les 2 lignes de login et mdp 🙂

  2. Jérôme R Réponse

    Salut,

    Merci beaucoup pour ce snippet ! Je galérais depuis 1 bonne heure avant de le trouver avec les explications qui vont bien et qui, du coup, fonctionne 🙂

    Donc merci à toi.

  3. Sen Réponse

    Entre la ligne 27 et la ligne 28 , je rajouterais:

    // Enable connection pooling
    environnement.put("com.sun.jndi.ldap.connect.pool", "true");

    Ca peut aider.

  4. imane Réponse

    svp , c’est quoi le probleme ?????????? T_T T_T T_T

    Connexion au serveur : ECHEC
    javax.naming.CommunicationException: 172.16.26.45:25 [Root exception is java.net.ConnectException: Connection refused: connect]
    at com.sun.jndi.ldap.Connection.(Connection.java:226)
    at com.sun.jndi.ldap.LdapClient.(LdapClient.java:137)
    at com.sun.jndi.ldap.LdapClient.getInstance(LdapClient.java:1614)
    at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2746)
    at com.sun.jndi.ldap.LdapCtx.(LdapCtx.java:319)
    at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:192)
    at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:210)
    at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:153)
    at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:83)
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313)
    at javax.naming.InitialContext.init(InitialContext.java:244)
    at javax.naming.InitialContext.(InitialContext.java:216)
    at javax.naming.directory.InitialDirContext.(InitialDirContext.java:101)
    at LdapConnection.main(LdapConnection.java:31)
    Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)

  5. ines Réponse

    SVP, je veux récupérer le pw (l’attribut “userPassword”)en forme hex. Merci

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.