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

Java Discussion :

Déverouiller un utilisateur AD


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Août 2010
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Irlande

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 98
    Par défaut Déverouiller un utilisateur AD
    Bonjour mes chers confrères.

    Première fois que je poste sur le forum Java, petite larme venant du monde .Net.

    Je suis actuellement en train de reprogrammer un logiciel en JAVA et je bloque sur une fonction de déverrouillage d'utilisateur ActiveDirectory.

    Ma fonction de connexion marche parfaitement :

    Ci dessous mon constructeur de classe et ma fonction de test de connexion

    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
     
     public ActiveDirectory(String domaineSaisi, String domaineCourt, String serveurDC,String user,String passwd)
        {
            this.domaine = domaineSaisi;
            this.user = user;
            this.ldapURI = "ldap://" + serveurDC + ":389";
            environnement = new Hashtable();
            environnement.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
            environnement.put(Context.SECURITY_AUTHENTICATION,"Simple");
            environnement.put(Context.SECURITY_PRINCIPAL, domaineCourt + "\\" + user);
            environnement.put(Context.SECURITY_CREDENTIALS, passwd);
            environnement.put(Context.PROVIDER_URL,this.ldapURI);
        }
     
        /**
         * Fonction de test de connexion au LDAP Active Directory
         * @return bool retourne vrai si la connexion s'effectue
         */
        public boolean testConnexion()
        {
            try
            {
            this.ldapcontext = new InitialLdapContext(environnement, null);
            System.out.println("Connexion sur AD ok : " + user + " sur " + domaine);
            return true;
            }
            catch (NamingException nex)
            {
                System.out.println("Connexion ldap échouée");
                System.out.append(nex.getExplanation());
                return false;
            }    
        }
    Ma fonction de listage des utilisateurs verrouillé marche également à merveille :

    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
     
    public List<String> listeUtilisateursVerouilles()
        {
            List<String> utilisateursVerrouilles = new java.util.ArrayList<>();
            try
            {            
                String requete = "(&(objectclass=user)(objectcategory=person)(lockoutTime>=1))";
                String[] domaineCasse = domaine.split("\\.");
                SearchControls monControleRecherche = new SearchControls();
                monControleRecherche.setSearchScope(SearchControls.SUBTREE_SCOPE);
                monControleRecherche.setTimeLimit(10000);
                String[] proprietesACharger = {"cn"};
                monControleRecherche.setReturningAttributes(proprietesACharger);
                NamingEnumeration resultat = ldapcontext.search("dc=" + domaineCasse[0] + ",dc=" + domaineCasse[1], requete,monControleRecherche);
     
                while (resultat.hasMore())
                {
                    SearchResult resultatEntry = (SearchResult) resultat.next();
                    Attributes attributsReponse = resultatEntry.getAttributes();
                    utilisateursVerrouilles.add(attributsReponse.get("cn").toString().substring(3));
                }
                this.ldapcontext.close();
            }
            catch (NamingException nex)
            {
                System.out.println(nex.getExplanation());
            }
            return utilisateursVerrouilles;
        }
    Cependant je rencontre un problème avec ma fonction de déverrouillage de l'utilisateur. En effet je sélectionne dans une JList mon utilisateur à déverrouiller issu de ma fonction listeUtilisateursVerouilles() ci-dessus.

    Lorsque j’exécute ma fonction de déverrouillage suivante : à aucun moment le catch n'est atteint, aucun message ne s'affiche dans ma console de débogage. Ma connexion au LDAP est bien faite avec un contexte d'administrateur du domaine et lors de l'execution de ma fonction, ma variable Entry renvoie bien dans le debugger mon bon utilisateur.


    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
     
    public void deverouilleUtilisateur(String filtre, String cible)
        {
            try
            {
                cible = cible.trim();
                String requete = "(&(objectclass=user)(objectcategory=person)(" + filtre + "=*" + cible + "*))";        
                String[] domaineCasse = domaine.split("\\.");
                SearchControls monControleRecherche = new SearchControls();
                monControleRecherche.setSearchScope(SearchControls.SUBTREE_SCOPE);
                monControleRecherche.setTimeLimit(10000);
                String[] proprietesACharger = {"lockoutTime","cn"};
                monControleRecherche.setReturningAttributes(proprietesACharger);
                NamingEnumeration resultat = ldapcontext.search("dc=" + domaineCasse[0] + ",dc=" + domaineCasse[1], requete,monControleRecherche);
                System.out.println(resultat.getClass());
                while (resultat.hasMore())
                {
                    SearchResult entry = (SearchResult) resultat.next();
                    Attributes attributesCible = entry.getAttributes();
                    attributesCible.put("lockoutTime", "0");
                    System.out.println("utilisateur " + cible + " deverrouillé");
                }
            }
            catch (NamingException nex)
            {
                System.out.println(nex.getExplanation());
            }
     
        }
    J'ai recherché sur Internet mais entre ceux qui disent d'utiliser un protocole SSL (sans succès) , essayé avec la valeur "0" ou 0, et autres chamanerie vaudou, je vous avoue qu'aucune solution n'a marché pour le moment et je me tourne vers vous.

    C'est mon premier programme en JAVA peut-être est-ce juste une erreur enorme que je vois pas n'hésitez pas à m'engueuler très fort.

    Merci de votre lecture et encore plus de votre réponse !

    Aidez-moi ObiWan Kenoby, vous êtes mon seul espoir !

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Par défaut
    Citation Envoyé par Homo_Informaticus Voir le message
    Bonjour mes chers confrères.

    Cependant je rencontre un problème avec ma fonction de déverrouillage de l'utilisateur. En effet je sélectionne dans une JList mon utilisateur à déverrouiller issu de ma fonction listeUtilisateursVerouilles() ci-dessus.

    Lorsque j’exécute ma fonction de déverrouillage suivante : à aucun moment le catch n'est atteint, aucun message ne s'affiche dans ma console de débogage. Ma connexion au LDAP est bien faite avec un contexte d'administrateur du domaine et lors de l'execution de ma fonction, ma variable Entry renvoie bien dans le debugger mon bon utilisateur.
    Vu que c'est ton premier programme java je préfère forcer le trait au cas où : tu ne vas dans le catch que si tu attrapes une exception dans le code du try. je supposes donc que tu t'attendais à ce qu'une exception surgisse ?

    Une remarque, dans ton catch tu ne rattrapes que les exceptions NamingException (ou hérité de). Il est plus sur de faire un double catch en rajoutant catch (Exception e) en dessous. Ainsi tu rattrapes bien toutes les exceptions! (pas les erreurs mais tu n'as pas forcément à t'en préoccuper).

    En résumé si tu as une exception qui n'est pas de type NamingException actuellement tu ne la verras pas.

  3. #3
    Membre confirmé
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Août 2010
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Irlande

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 98
    Par défaut
    Effectivement en renvoyant toutes les exception j'ai pu voir que le distinguished name envoyé était incorrect grâce à l'erreur intercéptée.

    J'envoyais "cn=monUser;ou=monOU" il manquait ","dc=monDomaine".

    Merci beaucoup pour l'aide apportée, j'ai encore beaucoup de pièges à éviter et de choses à apprendre

    Merci encore et excellente journée !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gestion approfondie des utilisateurs
    Par Lux interior dans le forum XMLRAD
    Réponses: 11
    Dernier message: 04/03/2003, 21h43
  2. Utilisateurs d'une appli delphi+paradox
    Par Jacques Deyrieux dans le forum Paradox
    Réponses: 2
    Dernier message: 11/12/2002, 18h41
  3. interface utilisateur avec OpenGL
    Par demis20 dans le forum OpenGL
    Réponses: 6
    Dernier message: 03/10/2002, 12h27
  4. Réponses: 8
    Dernier message: 05/06/2002, 11h55
  5. [Kylix] Sauvegarde de donnée utilisateur....
    Par Eclypse dans le forum EDI
    Réponses: 1
    Dernier message: 11/05/2002, 17h21

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