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

API standards et tierces Java Discussion :

[JNDI] comment insérer de nouveaux objets dans notre annuaire LDAP


Sujet :

API standards et tierces Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 25
    Points : 13
    Points
    13
    Par défaut [JNDI] comment insérer de nouveaux objets dans notre annuaire LDAP
    Bonjour,

    Apres multiple recherche sur internet je n'ai pas reussi a trouver de bon exemples de code qui permettent d'ajouter des entrées et ses attributs dans un annuaire LDAP.

    C'est pour cela que je viens à vous en esperant qu'une personne s'y connaisse en jndi et s'il pouvait mettre un exemple de comment insérer des données dans un annuaire sa serait sympa merci d'avance

    Je vous explique mon projet en qq lignes :

    je dois récuperer un fichier texte qui se trouve sur un serveur X, ce fichier est généré tout les soirs en batch, il ressemble à ca :

    dn: CN=777,OU=Utilisateurs,XXX
    changetype: Modify
    ADRAFFECTATION1: 32 RUE MIRABEAU
    ADRAFFECTATION2:
    ADRAFFECTATION3: 29480 LE RELECQ KERHUON
    ADRAFFECTATION4:
    ADRAFFECTATION5: FRANCE
    CODEAFFECTATION: 923067
    ...
    FinCollaborateur

    dn: CN=888,OU=Utilisateurs,XXX
    changetype: Modify
    ADRAFFECTATION1: ALLEE LOUIS LICHOU
    ADRAFFECTATION2:
    ADRAFFECTATION3: 29480 LE RELECQ KERHUON
    ADRAFFECTATION4:
    ADRAFFECTATION5: FRANCE
    CODEAFFECTATION: 918542
    ...
    Je dois grace à ce fichier alimenter mon annuaire LDAP ce trouvant sur un autre serveur, pour cela j'utilise le langage java et plus particulierement jndi qui me permet d'acceder donc à l'annuaire. j'arrive a m'y connecter mais je n'ai pas encore compris comment y insérer des données

    code que j'ai compris du jndi :

    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
    import java.util.Map;
    import javax.naming.*;
    import javax.naming.directory.*;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    import java.util.Hashtable;
     
    class Testjava {
            public static void main(String[] args) {
     
            // Set up environment for creating initial context
            Hashtable env = new Hashtable(11);
            env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
          env.put(Context.PROVIDER_URL,"ldap://localhost:389/dc=platine,dc=org");
     
            // Authenticate
            env.put(Context.SECURITY_AUTHENTICATION, "simple");
            env.put(Context.SECURITY_PRINCIPAL, "cn=root, dc=platine, dc=org");
            env.put(Context.SECURITY_CREDENTIALS, "xxxxxx");
     
            try
            {
            DirContext ctx = new InitialDirContext(env);
            System.out.println("Connection au serveur LDAP done");
     
            // do something useful with ctx
     
            Attributes answer = ctx.getAttributes("cn=Claire Chazal, ou=personnel, ou=GICM");
            for (NamingEnumeration ae = answer.getAll(); ae.hasMore();)
            {
                    Attribute attr = (Attribute)ae.next();
                    System.out.println("attribute: " + attr.getID());
                    for (NamingEnumeration e = attr.getAll(); e.hasMore();
                    System.out.println("value: " + e.next()));
            }
            ctx.close();
            System.out.println("Deconnection done");
            }
            catch (NamingException e)
            {
                    System.out.println("erreur ici: ");
                    e.printStackTrace();
            }
        }
    }
    A savoir que se programme marche bien , il se connecte et me retourne les attributs et la valeur des attributs de la personne.

    Mais je recherche maintenant à insérer moi meme de nouvelle personne

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Alors les pro jndi personne qui serait ?

    sinon une autre question à la suite dans mon code quand je met l'adresse du serveur ldap, quand je met "localhost" tout se passe bien mais quand je met la vrai adresse IP j'ai un message d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    env.put(Context.PROVIDER_URL,"ldap://localhost:389/dc=platine,dc=org");
    que je remplace par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    env.put(Context.PROVIDER_URL,"ldap://tata.toto.net:389/dc=platine,dc=org");
    le message d'erreur :
    javax.naming.CommunicationException: lcs-a.gicm.net:389 [Root exception is java.net.ConnectException: Connection refused]
    at com.sun.jndi.ldap.Connection.<init>(Connection.java:204)
    at com.sun.jndi.ldap.LdapClient.<init>(LdapClient.java:119)
    at com.sun.jndi.ldap.LdapClient.getInstance(LdapClient.java:1668)
    at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2599)
    at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:290)
    at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:175)
    at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:193)
    at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:136)
    at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:66)
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:243)
    at javax.naming.InitialContext.init(InitialContext.java:219)
    at javax.naming.InitialContext.<init>(InitialContext.java:195)
    at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.java:80)
    at Testjava.main(Testjava.java:42)
    Caused by: java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158)
    at java.net.Socket.connect(Socket.java:452)
    at java.net.Socket.connect(Socket.java:402)
    at java.net.Socket.<init>(Socket.java:309)
    at java.net.Socket.<init>(Socket.java:124)
    at com.sun.jndi.ldap.Connection.createSocket(Connection.java:346)
    at com.sun.jndi.ldap.Connection.<init>(Connection.java:181)
    ... 14 more
    le programme java est sur la meme machine que le serveur ldap.

    l'adresse que je lui passe en paramétre est la bonne car meme avec le logiciel LDAP browser j'arrive a me connecter au serveur LDAP.

    alors je me demande si le fait de lui donner sa vrai adresse IP et que je sois en local , cela ne lui plait pas

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 352
    Points : 445
    Points
    445
    Par défaut
    Moi je ne suis pas assez calé, mais il y en a qui le sot apparemment

    http://www.developpez.net/forums/sho...8&goto=newpost

    Jacques Desmazières

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    oui exact merci y a l'air d'avoir de bon connaisseurs

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2005
    Messages : 38
    Points : 46
    Points
    46
    Par défaut
    Quel type de serveur LDAP est ce ?

    - Active Directory 2000 ou 2003
    -OpenLDAP
    -Novell

  6. #6
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2005
    Messages : 38
    Points : 46
    Points
    46
    Par défaut
    Le mieux qu'en tu utilise OpenLDAP c'est d'utilisé la libraire jldap de novel, elle marche trés bien avec OpenLDAP

    tu trouvera la librairie ici: http://developer.novell.com/wiki/index.php/Jldap

    et des exemple d'utilisation ici: http://www.openldap.org/jldap/overview.html

  7. #7
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    Salut,

    j'ai une classe simple qui permet d'ajouter une entrée en jndi


    import javax.naming.*;
    import javax.naming.directory.*;

    import java.security.Security;
    import java.util.Hashtable;
    import java.util.ResourceBundle;

    /**
    * Shows contexts that share the same connection.
    *
    * usage: java Shared
    */
    class JNDI_DirectoryAdd {

    //fichier properties de connection Base
    static ResourceBundle rb = ResourceBundle.getBundle("connectAnnuaireLdap");

    public static void main(String[] args)
    {
    //---
    //SSL

    // Dynamically set JSSE as a security provider
    Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

    // Dynamically set the property that JSSE uses to identify
    // the keystore that holds trusted root certificates
    String certifPath=System.getProperty("user.dir")+"\\certificats\\"+rb.getString("certificat").trim();
    System.setProperty("javax.net.ssl.trustStore", certifPath);


    // Set up environment for creating initial context
    Hashtable env = new Hashtable(11);
    env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.PROVIDER_URL, "ldaps://*******:636");
    env.put(Context.SECURITY_AUTHENTICATION, "simple");
    env.put(Context.SECURITY_PRINCIPAL, "cn=****,dc=***,dc=fr");
    env.put(Context.SECURITY_CREDENTIALS, "****");
    env.put(Context.SECURITY_PROTOCOL, "ssl");
    env.put(Context.REFERRAL,"follow");

    try {

    //Create initial context
    DirContext ctx = new InitialDirContext(env);

    //AddDn
    //String parentDn="o=****,o=individus,dc=***,dc=fr";
    String parentDn="o=****,dc=***,dc=fr";

    //The objectclass
    Attribute objclass = new BasicAttribute("objectclass");
    //objclass.add("myPerson");
    objclass.add("inetOrgPerson");
    objclass.add("person");
    objclass.add("top");

    // Attribut
    Attribute userUid=new BasicAttribute("uid","AlphaBob");
    Attribute userCnName=new BasicAttribute("cn","Bob");
    Attribute userSnName=new BasicAttribute("sn","Boby");
    Attribute userFirstName=new BasicAttribute("givenname","Boby");

    // Create attributes to be associated with the new context
    Attributes attrs = new BasicAttributes(true); // case-ignore
    attrs.put(objclass);
    attrs.put(userUid);
    attrs.put(userCnName);
    attrs.put(userSnName);
    attrs.put(userFirstName);

    // Create the context
    Context result = ctx.createSubcontext("uid=AlphaBob,"+parentDn, attrs);

    // Close the contexts when we're done
    result.close();
    ctx.close();


    } catch (NamingException e) {
    e.printStackTrace();
    }
    }



    }

    Rmq: je prefere la librairie de Novell

Discussions similaires

  1. Creation d'un objet dans un annuaire LDAP
    Par reuqnas dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 06/05/2013, 11h41
  2. Comment insérer une macro excel dans une macro word?
    Par max2245 dans le forum VBA Word
    Réponses: 15
    Dernier message: 07/01/2006, 17h44
  3. Réponses: 2
    Dernier message: 07/12/2005, 16h26
  4. [XHTML11] Comment insérer une page externe dans une page ?
    Par Invité dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 17/03/2005, 19h43
  5. Comment insérer de l'unicode dans un Richedit ?
    Par DanaKil dans le forum C++Builder
    Réponses: 6
    Dernier message: 30/03/2004, 00h43

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