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 :

[LDAP]modification du mot de passe - ligne de commande


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 157
    Par défaut [LDAP]modification du mot de passe - ligne de commande
    Bonjour,

    J'ai créé une interface permettant de me connecter à une base LDAP (JNDI). Jusque là, ça fonctionne.

    Ensuite, j'aimerais que l'utilisateur puisse modifier son mot de passe.
    Pour ce faire, je lance un batch run.bat :
    • java -classpath ./classes ch.esnig.ldap.ClientLDAPUI
      -url="ldap://localhost:389" -authentication="simple"
      -principal="uid=geiers, ou=personne, dc=ecole, dc=ch"
      -credentials="xxx"
      java -classpath ./classes ch.esnig.ldap.ClientLDAPUI -newPsw


    Lorsque le batch contient la commande -newPsw, je demande la saisie et la validation du mot de passe.
    A la suite de ça, j'obtiens l'erreur suivante :
    • Exception in thread "main" java.lang.NullPointerException
      at ch.ldap.ClientLDAP.printMotPasseLDAP(ClientLDAP.java:108)
      at ch.ldap.ClientLDAPUI.main(ClientLDAPUI.java: 58)


    Voici mon interface :
    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
     
    public class ClientLDAPUI {
      public static void main(String[] args) {
        String attribut = "userPassword";
        ...
        ...
     
        ClientLDAP client = new ClientLDAP();
        try {
          if (args.length>0) {
            for (int i=0; i<args.length; i++) {
              if (args[i].startsWith("-url")) {
                url = args[i].substring(5);
                System.out.println("url " + url);
              }
              else if (args[i].startsWith("-authentication=")) {
                authentication = args[i].substring(16);
                System.out.println("authentication " + authentication);
              }
              else if (args[i].startsWith("-principal=")) {
                principal = args[i].substring(11);
                System.out.println("principal " + principal);
              }
              else if (args[i].startsWith("-credentials=")) {
                credentials = args[i].substring(13);
                System.out.println("credentials " + credentials);
     
              }
              else if (args[i].startsWith("-help")) {
                System.out.println ("-help= ");
              } 
     
              else if (args[i].startsWith("-newPsw")) {
                do {
                  Scanner s = new Scanner (System.in);
                  System.out.println ("Nouveau mot de passe : ");
                  newPsw = s.nextLine();
                  System.out.println ("Validation du nouveau mot de passe : ");
                  newPsw1 = s.nextLine();
     
                  if (! newPsw.equals (newPsw1)) {
                    System.out.println ("La validation du mot de passe n'est pas correcte !");
                  }
                }
                while (! newPsw.equals (newPsw1));
     
                client.printMotPasseLDAP (principal);
                encodedActualPassword = client.getEncodedPassword (newPsw);
                client.setPassword (attribut, encodedActualPassword, newPsw, principal);
                client.printMotPasseLDAP (principal);
              }
            }
          }
          client.connection (url, authentication, principal, credentials);
         }
        catch ( ClientLDAPException e ) {
          e.printStackTrace();
        }
      }
    }
    Désolée pour la longeur de mon message, mais c'est difficile de faire autrement pour essayer d'expliquer clairement.

    Si quelqu'un pouvait m'aider, ce serait sympa.

    Merci d'avance!

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Par défaut
    Peux tu nous montrer le code de la méthode : printMotPasseLDAP

  3. #3
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 157
    Par défaut
    Voici ma méthode printMotdePasseLDAP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public void printMotPasseLDAP (String principal) throws ch.esnig.ldap.ClientLDAPException {
        try {
          Attributes attrs = ctx.getAttributes (principal);
          System.out.println ("Mot de passe LDAP : " + attrs.get("userPassword").get());
        }
        catch ( javax.naming.NamingException e ) {
            throw new ch.esnig.ldap.ClientLDAPException("Error : Affichage mot de passe LDAP! (printMotPasseLDAP)", e );
        }
      }
    En fait j'utilise cette méthode uniquement pour voir à quoi ressemble le mot de passe LDAP crypté.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Par défaut
    J'ai l'impression que quand tu vas dans ta méthode(printMotPasseLDAP), tu n'as pas encore fait ta connection.
    Si c'est le cas, ctx vaut null et tu ne peux donc pas utiliser la méthode getAttributes dessus.
    Ce qui provoque cette exception.

    Arnaud

  5. #5
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 157
    Par défaut
    Merci Arnaud.

    Je pense aussi que ça doit être quelque chose comme ça. Le problème est que je ne sais pas où mettre, dans mon interface, l'appel de méthode :
    • client.connection (url, authentication, principal, credentials);


    Merci d'avance!

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Par défaut
    Juste après avoir fait le traitement de l'ensemble de tous tes paramètres.

    Et surtout, toujours avant la moindre action sur ton annuaire LDAP.

  7. #7
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 157
    Par défaut
    Dans mon cas, -newPsw fait également partie d'un traitement de paramètres et, apparemment, il faudrait que j'arrive à insérer mon appel de méthode juste avant.

    Mais si je mets mon appel de méthode
    client.connection (url, authentication, principal, credentials);

    entre un bloc else if, ça me déclenche une erreur.
    Est-ce que tu aurais une solution ?

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Par défaut
    Je ne maîtrise pas toute la structure de ton code et tes besoins donc c'est difficile de répondre.

    Tu peux effectivement récupérer le nouveau password avant de faire la connection à la base LDAP, par contre pour faire la modification du password, tu n'as pas le choix tu devras le faire après avoir fait la connection.

    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
    public class ClientLDAPUI { 
    	  public static void main(String[] args) { 
    	    String attribut = "userPassword"; 
    //	    ... 
    //	    ... 
     
    	    ClientLDAP client = new ClientLDAP(); 
    	    try {
     
    	      if (args.length>0) { 
    	        for (int i=0; i<args.length; i++) { 
    	          if (args[i].startsWith("-url")) { 
    	            url = args[i].substring(5); 
    	            System.out.println("url " + url); 
    	          } 
    	          else if (args[i].startsWith("-authentication=")) { 
    	            authentication = args[i].substring(16); 
    	            System.out.println("authentication " + authentication); 
    	          } 
    	          else if (args[i].startsWith("-principal=")) { 
    	            principal = args[i].substring(11); 
    	            System.out.println("principal " + principal); 
    	          } 
    	          else if (args[i].startsWith("-credentials=")) { 
    	            credentials = args[i].substring(13); 
    	            System.out.println("credentials " + credentials); 
     
    	          } 
    	          else if (args[i].startsWith("-help")) { 
    	            System.out.println ("-help= "); 
    	          } 
     
    	          else if (args[i].startsWith("-newPsw")) { 
    	            do { 
    	              Scanner s = new Scanner (System.in); 
    	              System.out.println ("Nouveau mot de passe : "); 
    	              newPsw = s.nextLine(); 
    	              System.out.println ("Validation du nouveau mot de passe : "); 
    	              newPsw1 = s.nextLine(); 
     
    	              if (! newPsw.equals (newPsw1)) { 
    	                System.out.println ("La validation du mot de passe n'est pas correcte !"); 
    	              } 
    	            } 
    	            while (! newPsw.equals (newPsw1)); 
     
     
    	          } 
    	        } 
    	      } 
    	      client.connection (url, authentication, principal, credentials);
    	      if ((newPsw!=null) && (!newPsw.equals("")))
    	      {
              client.printMotPasseLDAP (principal); 
              encodedActualPassword = client.getEncodedPassword (newPsw); 
              client.setPassword (attribut, encodedActualPassword, newPsw, principal); 
              client.printMotPasseLDAP (principal);
    	      }
    	     } 
    	    catch ( ClientLDAPException e ) { 
    	      e.printStackTrace(); 
    	    } 
    	  } 
    	}

  9. #9
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 157
    Par défaut
    Arnaud, j'ai modifié mon code, mais j'ai toujours une erreur. Je comprends bien que ça ne doit pas être évident pour toi de m'aider, puisque tu ne connais pas mon code en entier.

    J'ai constaté que l'erreur provient plutôt de l'url.
    En effet, il se réfère à ma méthode de connexion et la ligne correspondant l'url.

    Voici ma méthode de connection :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public void connection (String url, String authentication, String principal, String credentials) throws ch.esnig.ldap.ClientLDAPException {
        Hashtable<String,String> env;
        env = new Hashtable<String,String>();
        env.put (Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        env.put (Context.PROVIDER_URL, url);
        env.put (Context.SECURITY_AUTHENTICATION, authentication);
        env.put (Context.SECURITY_PRINCIPAL, principal);
        env.put (Context.SECURITY_CREDENTIALS, credentials);
       ...
       ...
    Je ne vois pas bien pourquoi j'ai un problème au niveau de l'url...
    Est-ce que tu aurais une idée Arnaud ?

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Par défaut
    Quelle est ton erreur ?

  11. #11
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 157
    Par défaut
    Voici mon erreur :
    • Exception in thread "main" java.lang.NullPointerException
      at java.util.Hashtable.put(Hashtable.java:396)
      at ch.ldap.ClientLDAP.connection(ClientLDAP.java:24)
      at ch.ldap.ClientLDAPUI.main(ClientLDAPUI.java:58)

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Par défaut
    url est une variable locale ou un attribut de ta classe ?

    Comment est il initialisé ?

    As tu regardé sa valeur dans ta méthode de connection ? null ?

  13. #13
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 157
    Par défaut
    Dans mon interface (main), j'ai déclaré la variable url et je l'ai initialisée à Null.

    Je l'initialise grâce à mon batch run.bat :
    • java -classpath ./classes ch.ldap.ClientLDAPUI
      -url="ldap://localhost:389"
      -authentication="simple"
      -principal="uid=geiers, ou=personne, dc=ecole, dc=ch"
      -credentials="xxx"

      java -classpath ./classes ch.esnig.ldap.ClientLDAPUI -newPsw

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Par défaut
    Que donnes System.out.println("url " + url); dans ta méthode connection ?

  15. #15
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 157
    Par défaut
    Il m'affiche :

    url ldap://localhost:389

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Par défaut
    Es tu sur que c'est sur cette ligne que tu as l'erreur ?

    env.put (Context.PROVIDER_URL, url);

  17. #17
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 157
    Par défaut
    Si je regarde la ligne 24 du fichier ClientLDAP de la méthode connection, ça correspond bien à la ligne :
    • env.put (Context.PROVIDER_URL, url);


    Et si je regarde la ligne 58 du fichier ClientLDAPUI, ça correspond à la ligne :
    • client.connection (url, authentication, principal, credentials);


    C'est bizarre, non ?[/list]

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Par défaut
    Rajoute ces ligne juste avant env.put (Context.PROVIDER_URL, url);:

    System.out.println("url Avant put" + url);
    System.out.println("PROVIDER_URL " + Context.PROVIDER_URL);


    et puis rajoute ces lignes juste après env.put (Context.PROVIDER_URL, url);:


    System.out.println("url Après put" + url);
    System.out.println("PROVIDER_URL " + Context.PROVIDER_URL);


    Que vois tu ?

  19. #19
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 157
    Par défaut
    J'ai rajouté ces lignes et voici ce que je vois :
    • url Avant putldap://localhost:389
      PROVIDER_URL java.naming.provider.url
      url AprÞs putldap://localhost:389
      PROVIDER_URL java.naming.provider.url

  20. #20
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 157
    Par défaut
    J'ai fait un autre essai.
    L'interface demande la saisie du nouveau mot de passe et sa validation et ensuite il m'envoie l'erreur suivante :
    • F:\undercvs\projets\DHU\td05_7_ldap_client\ldap\modifierPsw>java -classpath ./cl
      asses ch.esnig.ldap.ClientLDAPUI -newPsw
      Nouveau mot de passe :
      essai05
      Validation du nouveau mot de passe :
      essai05
      url Avant putnull
      PROVIDER_URL java.naming.provider.url
      Exception in thread "main" java.lang.NullPointerException
      at java.util.Hashtable.put(Hashtable.java:396)
      at ch.ldap.ClientLDAP.connection(ClientLDAP.java:28)
      at ch.ldap.ClientLDAPUI.main(ClientLDAPUI.java:63)


    Ca veut dire qu'il s'arrête en cours de route ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/07/2011, 15h35
  2. [LDAP] cryptage de mot de passe
    Par zizou1000 dans le forum Langage
    Réponses: 5
    Dernier message: 18/11/2008, 18h03
  3. Réponses: 3
    Dernier message: 22/06/2007, 19h01
  4. Réponses: 2
    Dernier message: 02/02/2007, 14h53
  5. [LDAP] Récupération de mot de passe user sous openLDAP Mac OSX en PHP
    Par 3mPty dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 13/07/2006, 10h23

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