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

Langage Java Discussion :

Pb connection annuaire LDAP


Sujet :

Langage Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 65
    Points : 49
    Points
    49
    Par défaut Pb connection annuaire LDAP
    Bonjour à tous!

    Je ne suis pas sure que ce soit le bon endroit pour poster cette question, mais voici mon problème.

    Je suis en train de reprendre un code qui faisait une connection a un annuaire LDAP en utilisant les classes de websphere ibm.
    Il faut maintenant utilser les classes de sun (jndi package).

    Lorsque j'essai de me connecter au serveur voici l'exception que j'ai:

    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
    javax.naming.CommunicationException: monAnnuaire.fr:30002 [Root exception is java.net.ConnectException: Connection timed out: connect]
    	at com.sun.jndi.ldap.Connection.<init>(Unknown Source)
    	at com.sun.jndi.ldap.LdapClient.<init>(Unknown Source)
    	at com.sun.jndi.ldap.LdapClient.getInstance(Unknown Source)
    	at com.sun.jndi.ldap.LdapCtx.connect(Unknown Source)
    	at com.sun.jndi.ldap.LdapCtx.<init>(Unknown Source)
    	at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(Unknown Source)
    	at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(Unknown Source)
    	at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(Unknown Source)
    	at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(Unknown Source)
    	at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
    	at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
    	at javax.naming.InitialContext.init(Unknown Source)
    	at javax.naming.InitialContext.<init>(Unknown Source)
    	at javax.naming.directory.InitialDirContext.<init>(Unknown Source)
    	at reflet.trtlot.utils.LDAPSearch.getMail(LDAPSearch.java:95)
    Y'a t'il un moyen simple de savoir si cet annuaire est accessible (sans passer par java?)ou alors c'est peut être iun problème de contexte?
    ou sinon est ce que vous avez une idée?

    Merci.

    Aurélie.

  2. #2
    Membre à l'essai
    Homme Profil pro
    architecte java
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : architecte java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Points : 13
    Points
    13
    Par défaut
    Hi,

    j'ai très récemment travailler sur Ldap et jndi.

    Mon 1er conseil est le suivant :

    - teste la connexion à ton annuaire avec ldapbrowser par exemple.
    C'est un petit logiciel gratuit (en java swing !) tres léger qui permet de visualiser/modifer les données d'un annuaire ldap.
    LdapBrowser (650Ko) : http://www-unix.mcs.anl.gov/~gawor/ldap/download.html.

    - verifie les parametres de connexion dans ton appli : adresse, password, dn .

    - a voir selon le resultat des points ci dessus

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 65
    Points : 49
    Points
    49
    Par défaut
    Merci beaucoup ajafighting pour ta reponse.

    J'ai effectivement telechargé ldapbrowser mais je n'arrive toujours pas à me connecter a l'annuaire...

    Je vais essayer de voir ce qui se passe.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 239
    Points : 239
    Points
    239
    Par défaut
    Salut,

    dans mon service on utilise un LDAP pour une authentification unique pour nos applis java. Est-ce que tu peux me montrer le bout de code qui se connecte au LDAP ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 65
    Points : 49
    Points
    49
    Par défaut
    Salut sleppy2002,


    Voici mon code: c'est une classe statique qui permet de faire la connexion à l'annuaire:


    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    public class LDAPSearch {
     
        // ------------------------------------------------------------------------
        // CONSTANTES DE L'OBJET
        // ------------------------------------------------------------------------
     
        /**
         * Nom de l'objet.
         */
        private final static String OBJET = "LDAPSearch";
     
        // ------------------------------------------------------------------------
        // ATTRIBUTS DE L'OBJET
        // ------------------------------------------------------------------------
     
        /**
         * Proprietes de connexion a l'annuaire LDAP.
         */
        private static Properties env = null;
     
        // ------------------------------------------------------------------------
        // CONSTRUCTEUR DE L'OBJET
        // ------------------------------------------------------------------------
     
        static {
            init();
        }
     
        // ------------------------------------------------------------------------
        // METHODES DE L'OBJET
        // ------------------------------------------------------------------------
     
        /**
         * Charge les proprietes de l'environnement LDAP depuis le fichier
         * de configuration .
         */
        private static void init() {
     
            // Table de proprietes des informations d'environnement
            env = new Properties();
     
            // Specifier la classe a utiliser comme fournisseur JNDI
            env.put(Context.INITIAL_CONTEXT_FACTORY, Constantes.ANNUAIRE_FT_INIT_CTX);
     
            // Specifier l'hote et le port a utiliser comme fournisseur JNDI
            env.put(Context.PROVIDER_URL, Constantes.ANNUAIRE_FT_URL);
     
            // Specifier le mode de connexion
            env.put(Context.SECURITY_AUTHENTICATION, Constantes.ANNUAIRE_FT_AUTH);
     
            // Specifier le DN de connexion
            env.put(Context.SECURITY_PRINCIPAL, Constantes.ANNUAIRE_FT_DN);
     
            // Specifier le mot de passe de connexion
            env.put(Context.SECURITY_CREDENTIALS, Constantes.ANNUAIRE_FT_PASSWD);
     
        }
     
        /**
         * Recherche l'adresse mail d'un utilisateur donne 
         * dans l'intrannuaire.
         * 
         * @param identFT Le code ident de l'utilisateur.
         * @return L'adresse mail de l'utilisateur ou null si non trouve.
         */
        public static String getMail(String identFT) {
     
            final String METHODE = "getMail";
     
            String mail = null;
     
            try {
     
                // Obtenir une reference vers un contexte d'annuaire
                DirContext ctx = new InitialDirContext(env);
     
        		// Specifier la base de recherche
        		String base = Constantes.ANNUAIRE_FT_BASE;
     
        		// Specifier un filtre de recherche
        		String filtre = "(uid=" + identFT + ")";
     
        		// Specifier la portée de la recherche
        		SearchControls constraints = new SearchControls();
        		constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
     
        		// Accomplir la recherche 
        		NamingEnumeration results = ctx.search(base, filtre, constraints);
     
        		// Parcourir maintenant les resultats de la recherche
        		if (results != null && results.hasMore()) {
        			SearchResult sr = (SearchResult) results.next();
        			if (sr != null) {
        			    Attributes atts = sr.getAttributes();
        			    if (atts != null) {
        			        Attribute att = atts.get(Constantes.ANNUAIRE_FT_ATTR_MAIL);
        			        if (att != null) {
        			            mail = (String) att.get(0);
        			        }
        			    }
        			}
        		}
     
            } catch (NamingException e) {
                String msg = "Erreur lors de la recherche du mail de l'utilisateur " + identFT + " dans l'intrannuaire";
                Log.err(new ExceptionTechnique(msg, e, "LDAPSearch"));
            } catch (NullPointerException e) {
                String msg = "Erreur lors de la recherche du mail de l'utilisateur " + identFT + " dans l'intrannuaire";
                Log.err(new ExceptionTechnique(msg, e, "LDAPSearch"));
            }catch (Exception e ){
            	System.out.println("exception : "+e.toString());
            }
     
            return mail;
        }
     
     
     
    }
    C'est le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new InitialDirContext(env);
    qui lève une "CommunicationException" catchée dans le .

    En fait je pense plutot que j'arrive pas a joindre l'annuaire. J'ai pas encore regardé

  6. #6
    Membre à l'essai
    Homme Profil pro
    architecte java
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : architecte java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Aurélie38 Voir le message
    Merci beaucoup ajafighting pour ta reponse.

    J'ai effectivement telechargé ldapbrowser mais je n'arrive toujours pas à me connecter a l'annuaire...

    Je vais essayer de voir ce qui se passe.
    Je te propose la démarche suivante :

    i) Arrêt du serveur ldap.
    Arretons le serveur ldap.
    Se connecter sur la machine qui héberge le serveur ldap et comme je suis un violent, je procède par un 'ps slapd' suivi d'un kill du n° du processus.
    Si tu n'as pas les droits d'acces, c'est le bon moment pour aller embêter l'admin/integrateur du projet

    ii) Vérification du slapd.conf.
    Vérifions les paremtres du ldap. Dans le fichier slpad.conf,
    vérifier les valeurs du password, suffix, root dn et des valeurs des sous-identifiants 'access .. by' (ces derniers seront les identifiants de connexion pour java).

    iii) Redémarrage du ldap.
    Faisons le redémarrage en 2 etapes. D'abord on le redémarre avec un 'slapd -d 1' pour vérifier par les messages sur la console que le ldap démarre correctement. Si on a des erreurs en sortie, c'est souvent que les parametres du slapd.conf sont incorrectes (tabulation ) ou que les données de la base sont corrompues (on efface tout et on reprend à zéro !).
    Re-arrêtons le ldap (point i)) et on re-démarre par un 'slapd &' pour un sortie silencieuse.

    iv) Vérification reseau.
    Depuis notre machine de dev, faisons un ping vers la machine qui gère le slapd. ex : ping 'annuaire.projet.dev'
    Si le ping echoue, voir l'admin.
    N'étant pas un spécialiste réseau, cette étape n'est peut-être pas décivise.

    v) Connexion via ldapbrowser.
    Sur notre machine de dev, démarrer ldapbrowser.
    'New' puis

    Host : le dns, ip du serveur ldap. Cela peut être localhost si tu testes avec un slapd installé sur ta machine de dev.
    Port : 389 ou 636 si tu es en ldaps (ce qui peut expliquer les problèmes de connexion à cause des certificats).
    Version : 3 en général
    Base Dn : valeur du 'suffix' du slapd.conf
    On suppose que tu te connectes sur le port 389 donc accès non securisé donc ne pas cocher SSL, ne rien cocher dans le bloc 'host info'.

    User dn : mettre le root dn et cocher 'Append base dn'
    Password : mettre la valeur du password du slapd.conf

    'Save' puis 'Connect' et normalement ca devrait le faire !

    oui, non ?

Discussions similaires

  1. [EasyPHP] Connection à un annuaire LDAPS
    Par olivier3d dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 21/02/2013, 15h21
  2. [LDAP] se connecter a annuaire ldap
    Par dunod dans le forum Sécurité
    Réponses: 7
    Dernier message: 01/03/2011, 15h29
  3. [AC-2007] Comment se connecter à un annuaire LDAP depuis Access?
    Par Kokul dans le forum Access
    Réponses: 2
    Dernier message: 28/04/2010, 14h46
  4. Connection JNDI vers annuaire LDAP
    Par zakaria0509 dans le forum ODI (ex-Sunopsis)
    Réponses: 0
    Dernier message: 11/09/2008, 14h53
  5. Interface graphique pour administrer un annuaire LDAP???
    Par SnipCool dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 09/06/2005, 17h40

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