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(); } } }
Merci beaucoup pour ce tuto hyper clair…j’étais coincé pendant un bon bout de temps 🙂
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 🙂
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.
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.
salut,
Merci beaucoup pour ce tuto
Très utile, merci !
svp , c’est quoi le probleme ?????????? T_T T_T T_T
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)
J’ai le même problème que toi …
SVP, je veux récupérer le pw (l’attribut “userPassword”)en forme hex. Merci
Merci ce code est vraiment détaillé