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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    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 confirmé
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    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 confirmé
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    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 éclairé
    Inscrit en
    Février 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 43
    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 confirmé
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    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 éclairé
    Inscrit en
    Février 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 43
    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,

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