IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Récupération des valeurs avec LDAP


Sujet :

avec Java

  1. #1
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    Points : 47
    Points
    47
    Par défaut Récupération des valeurs avec LDAP
    salut,


    je veux faire une class java qui va résuperer les utilisateurs depuis LDAP

    et afficher en consoles les SN et mail

    j'arrive à insérer un utilisateurs dans LDAP mais comme je dis je veux accéder à LDAP en mode lecture et parcourir tous les utilisateurs qui sont sous arborescence

    com
    example


    le code d'insertion d'un nouveaux utilisateurs est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    import java.util.Hashtable;
    import java.util.Properties;
    import java.util.jar.Attributes;
     
    import javax.naming.Context;
    import javax.naming.NamingException;
    import javax.naming.directory.Attribute;
    import javax.naming.directory.BasicAttribute;
    import javax.naming.directory.BasicAttributes;
    import javax.naming.directory.DirContext;
    import javax.naming.directory.InitialDirContext;
     
    public class LdaTest{
     
    public static void main(String[] args) {
     
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.PROVIDER_URL, "ldap://localhost:389");
    env.put(Context.SECURITY_AUTHENTICATION, "simple");
    env.put(Context.SECURITY_PRINCIPAL,"uid=admin,ou=system"); // specify the username
    env.put(Context.SECURITY_CREDENTIALS,"secret");// specify the password
    // TODO code application logic here
     
    // entry's DN
    String entryDN = "uid=newUser,dc=example,dc=com";
     
    // entry's attributes
     
    Attribute cn = new BasicAttribute("cn", "crestianao2");
    Attribute sn = new BasicAttribute("sn", "ronaldino2");
    Attribute mail = new BasicAttribute("mail", "crestiano2@yahoo.com");
    Attribute phone = new BasicAttribute("telephoneNumber", "+1 222 333");
    Attribute givenName = new BasicAttribute("givenName", "ronaldo");
    Attribute userpassword = new BasicAttribute("userpassword", "crestiano");
    Attribute oc = new BasicAttribute("objectClass");
    oc.add("top");
    oc.add("person");
    oc.add("organizationalPerson");
    oc.add("inetOrgPerson");
     
    DirContext ctx = null;
     
    try {
    // get a handle to an Initial DirContext
    ctx = new InitialDirContext(env);
     
    // build the entry
    BasicAttributes entry = new BasicAttributes();
     
     
    entry.put(cn);
    entry.put(givenName);
    entry.put(sn);
    entry.put(mail);
    entry.put(phone);
    entry.put(userpassword);
    entry.put(oc);
     
     
     
    entry.put(oc);
     
    // Add the entry
     
    ctx.createSubcontext(entryDN, entry);
    // System.out.println( "AddUser: added entry " + entryDN + ".");
     
    } catch (NamingException e) {
    System.err.println("AddUser: error adding entry." + e);
    }
    }
    }
    merci d'avance

  2. #2
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    Points : 47
    Points
    47
    Par défaut
    personne n'a acune idée sur ce genre de problème

    je trouve dans le net un code qui affiche sous forme html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
            AttributePrincipal principal = (AttributePrincipal)request.getUserPrincipal();
     
            Map attributes = principal.getAttributes();
     
            Iterator attributeNames = attributes.keySet().iterator();
     
            out.println("Attributs<table>");
     
            for (; attributeNames.hasNext();) {
            out.println("<tr><th>");
            String attributeName = (String) attributeNames.next();
                  out.println(attributeName);
                  out.println("</th><td>");
                  Object attributeValue = attributes.get(attributeName);
                  out.println(attributeValue);
                  out.println("</td></tr>");
            }
     
            out.println("</table>");
    donc on peut inspérer de ce code pour faire le parcours des utilisateurs dans LDAP

    et les afficher en mode console

  3. #3
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    Points : 47
    Points
    47
    Par défaut
    personne n'a aucune idée sur comment faire extraction de donné de LDAP

    c'est à dire accéder en mode lecture

  4. #4
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 43
    Points : 64
    Points
    64
    Par défaut
    Hello,

    une simple recherche dans google et tu trouve pas mal de site qui explique comment faire pour crée une méthode qui permet de chercher dans LDAP

    http://lmgtfy.com/?q=A+simple+LDAP+q...am+in+Java&l=1

    sinon voila une méthode qui permet de le faire, il faut juste l'adapter a ton besoin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    public String getUserFromLDAP(String mail){
    	String user = "";
    	String filter = "(&(objectClass=*)(mail=" + mail + "))";
    	try {
    		SearchControls ctls = new SearchControls();
    		ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
    		ctls.setReturningAttributes(new String[] { "sn", "mail" });
    		NamingEnumeration<?> resultEnum = ldapContext.search(baseName, filter, ctls);
    		while (resultEnum.hasMore()) {
    			SearchResult result = (SearchResult) resultEnum.next();
    			Attributes attrs = result.getAttributes();
    			NamingEnumeration<?> e = attrs.getAll();
    			while (e.hasMore()) {
    				Attribute attr = (Attribute) e.next();
    				user = attr.toString();
    			}
    		}
    		ldapContext.close();
    	}catch (CommunicationException e) {
    		//TODO :
    	}catch (PartialResultException e) {
    		//TODO :
    	} catch (NamingException e) {
    		//TODO :
    	}catch (NoSuchElementException e) {
    		//TODO :
    	}
    	return user;
    }
    PS : j'ai pas tester la méthode il ce peux que y a des erreur mais tu peux t'inspirer pour crée ta propre méthode

    Cordialement

  5. #5
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    Points : 47
    Points
    47
    Par défaut
    merci pour votre réponse

    j'essaye de tester quelque code mais rien n'est affiché et dans certain code une erreur est affiché au niveau de serach

    comme je dis je test le premier code d'insertion d'un nouveau utilisateur donné dans la première discussion

    et je pense qu'il y'a une partie commune quelque soit faire lister les utilisateur

    ou bien modifier un utilisateur dans LDAP

    cette partie commune est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.PROVIDER_URL, "ldap://localhost:389");
    env.put(Context.SECURITY_AUTHENTICATION, "simple");
    env.put(Context.SECURITY_PRINCIPAL,"uid=admin,ou=system"); // specify the username
    env.put(Context.SECURITY_CREDENTIALS,"secret");// specify the password
    DirContext contex= new InitialDirContext(env);
     
    //mais  je pense que je dois utiliser ces informations   dc=example,dc=com
     
    // car les utilisateurs se trouve dans cette arborescence

    je test ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    LinkedList list = new LinkedList();
    NamingEnumeration results = null;
    try {
       SearchControls controls =
          new SearchControls();
       controls.setSearchScope(
          SearchControls.SUBTREE_SCOPE);
     
       Name baseName = null;
    results = contex.search(
    		   "", "(objectclass=*)", controls);
     
       while (results.hasMore()) {
          SearchResult searchResult =
             (SearchResult) results.next();
          Attributes attributes =
             (Attributes) searchResult.getAttributes();
          Attribute attr = (Attribute) attributes.get("cn");
          String cn = (String) attr.get();
          System.out.println(cn);
          list.add(cn);
       }
    } catch (NameNotFoundException e) {
       // The base context was not found.
       // Just clean up and exit.
    } catch (NamingException e) {
       throw new RuntimeException(e);
    } finally {
       if (results == null) {
          try {
        	  System.out.println(" rien retourné");
             results.close();
          } catch (Exception e) {
             // Never mind this.
          }
       }
       if (contex != null) {
          try {
        	  contex.close();
          } catch (Exception e) {
             // Never mind this.
          }
       }
    }

    et après l’exécution ce message est affiché : rien retourné

    qui indique que research n'a rien retourné ainsi ce code a manqué cette information dc=example,dc=com



    merci d'avance

  6. #6
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 43
    Points : 64
    Points
    64
    Par défaut
    Hello,

    Citation Envoyé par alen22 Voir le message

    cette partie commune est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.PROVIDER_URL, "ldap://localhost:389");
    env.put(Context.SECURITY_AUTHENTICATION, "simple");
    env.put(Context.SECURITY_PRINCIPAL,"uid=admin,ou=system"); // specify the username
    env.put(Context.SECURITY_CREDENTIALS,"secret");// specify the password
    DirContext contex= new InitialDirContext(env);
    oui

    Citation Envoyé par alen22 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    LinkedList list = new LinkedList();
    NamingEnumeration results = null;
    try {
       SearchControls controls =
          new SearchControls();
       controls.setSearchScope(
          SearchControls.SUBTREE_SCOPE);
     
       Name baseName = null;
    results = contex.search(
    		   "", "(objectclass=*)", controls);
     
       while (results.hasMore()) {
          SearchResult searchResult =
             (SearchResult) results.next();
          Attributes attributes =
             (Attributes) searchResult.getAttributes();
          Attribute attr = (Attribute) attributes.get("cn");
          String cn = (String) attr.get();
          System.out.println(cn);
          list.add(cn);
       }
    } catch (NameNotFoundException e) {
       // The base context was not found.
       // Just clean up and exit.
    } catch (NamingException e) {
       throw new RuntimeException(e);
    } finally {
       if (results == null) {
          try {
        	  System.out.println(" rien retourné");
             results.close();
          } catch (Exception e) {
             // Never mind this.
          }
       }
       if (contex != null) {
          try {
        	  contex.close();
          } catch (Exception e) {
             // Never mind this.
          }
       }
    }

    il me semble qu'il te manque un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    controls.setReturningAttributes(new String[] { "sn", "mail" });

    Cordialement,

  7. #7
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    Points : 47
    Points
    47
    Par défaut
    encore une fois merci pour votre réponse

    j'essaye avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.PROVIDER_URL, "ldap://localhost:389");
    env.put(Context.SECURITY_AUTHENTICATION, "simple");
    env.put(Context.SECURITY_PRINCIPAL,"uid=admin,ou=system"); // specify the username
    env.put(Context.SECURITY_CREDENTIALS,"secret");// specify the password
    DirContext contex= new InitialDirContext(env);
     
     
    LinkedList list = new LinkedList();
    NamingEnumeration results = null;
    try {
       SearchControls controls =
          new SearchControls();
    controls.setReturningAttributes(new String[] { "sn", "mail" });
       controls.setSearchScope(
          SearchControls.SUBTREE_SCOPE);
     
     
    results = contex.search(
    		   "", "(objectclass=*)", controls);
     
       while (results.hasMore()) {
          SearchResult searchResult =
             (SearchResult) results.next();
          Attributes attributes =
             (Attributes) searchResult.getAttributes();
          Attribute attr = (Attribute) attributes.get("cn");
          String cn = (String) attr.get();
          System.out.println(cn);
          list.add(cn);
       }
    } catch (NameNotFoundException e) {
       // The base context was not found.
       // Just clean up and exit.
    } catch (NamingException e) {
       throw new RuntimeException(e);
    } finally {
       if (results == null) {
          try {
        	  System.out.println(" rien retourné");
             results.close();
          } catch (Exception e) {
             // Never mind this.
          }
       }
       if (contex != null) {
          try {
        	  contex.close();
          } catch (Exception e) {
             // Never mind this.
          }
       }
    }
    mais toujours même message : rien retourné

    mais je pense que je dois mettre cette information dc=example, dc=com

    car les utilisateurs dans LDAP se trouvent dans cette arborescence

    --->com
    ------->example

  8. #8
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    Points : 47
    Points
    47
    Par défaut
    personne n'a aucune idée sur ce genre de problème

    puisque l'ancien code n'a rien affiché comme valeurs de retours des attributs

    juste récupérer les utilisateurs depuis LDAP et afficher les valeurs des attributs (SN et MAIL.....) en mode console

    pour le code de la partie connexion est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.PROVIDER_URL, "ldap://localhost:389");
    env.put(Context.SECURITY_AUTHENTICATION, "simple");
    env.put(Context.SECURITY_PRINCIPAL,"uid=admin,ou=system"); // specify the username
    env.put(Context.SECURITY_CREDENTIALS,"secret");// specify the password
    DirContext contex= new InitialDirContext(env);
    et comme je dis mes utilisateur dans LDAP se trouvent sous cette arborescence

    ------COM
    ------------EXAMPLE

  9. #9
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    Points : 47
    Points
    47
    Par défaut
    pour le moment j'essaye de faire tourner un autre code java qui permet de supprimer et de modifier un attribut dans LDAP

    j'essaye avec modify_attribute et delete_attribute

    mais je trouve des erreurs

    est ce que quelqu'un pouvez m'aider à supprimer un attribut ou de le modifier dans LDAP

    merci d'avance

  10. #10
    Membre confirmé Avatar de Mobius
    Profil pro
    none
    Inscrit en
    Avril 2005
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : none

    Informations forums :
    Inscription : Avril 2005
    Messages : 463
    Points : 558
    Points
    558
    Par défaut
    Pour modifier ou supprimer des attributs, j'ai pour habitude de faire comme ca :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    context.modifyAttributes(dn, LdapContext.REPLACE_ATTRIBUTE, attributes);
    Ca remplace tous les attributs de l'entrée que tu modifies par les nouveaux attributs. Donc si tu conserves par ailleurs les données de ton entrée, cette méthode est assez facile a mettre en oeuvre.

    Par ailleur, je vais me faire un peu de promo et t'indiquant une lib que j'ai développé dans le but de faciliter les accès LDAP. Il s'agit de ldapbeans

    Si tu as besoins d'aide, n'hésite pas a me contacter.


    Concernant tes erreurs, peut être pourrais tu nous les expliquer pour qu'on puisse te guider
    Librairie d'accès LDAP en Java : LdapBeans
    et pensez au tag

Discussions similaires

  1. Problème de récupération des valeurs avec ConfigurationManager
    Par titounnette dans le forum Windows Forms
    Réponses: 11
    Dernier message: 25/06/2009, 14h33
  2. Mauvaise récupération des valeurs avec $_POST
    Par Trebor_ dans le forum Langage
    Réponses: 2
    Dernier message: 02/03/2008, 10h33
  3. Problème avec COUNT() et la récupération des valeurs..
    Par Marshall_Mathers dans le forum Outils
    Réponses: 4
    Dernier message: 25/06/2007, 12h26
  4. [MySQL] problème avec la récupération des valeurs des variables POST
    Par Jasmine80 dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 11/05/2007, 16h08
  5. Réponses: 8
    Dernier message: 20/04/2007, 15h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo