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

JDBC Java Discussion :

[debutant]problème avec une authentification


Sujet :

JDBC Java

  1. #1
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 301
    Points : 75
    Points
    75
    Par défaut [debutant]problème avec une authentification
    J'ai réalisé une authentification toute simple avec le login et le mot de passe et je voudrais mettre une condition si le login n'est pas dans la bdd

    voici mon 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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
     public void Identif(String login, String pass) {
                  Connection conn = null;
                  String message = new String();
     
            try {         
                           Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                           conn = DriverManager.getConnection("jdbc:odbc:BiorG","","");
                           System.out.println("Connexion établie avec BiorG");
                           Statement s = conn.createStatement ();
                           Statement s1 = conn.createStatement ();
                           s1.executeQuery("SELECT Utilisateurs.Login FROM Utilisateurs");
                           s.executeQuery ("SELECT Utilisateurs.Password, Utilisateurs.Login FROM Utilisateurs WHERE (Utilisateurs.Login)=\'"+login+"\'");
                           ResultSet rs = s.getResultSet ();
                           ResultSet rs1 = s1.getResultSet ();
                           while (rs1.next()){
                                String log = rs1.getString("Login");
                                 System.out.println("fct" + log);
                               if (log.equals(login)){
                                      while (rs.next()){ 
                                String mdp = rs.getString ("Password");
     
                              if (mdp.equals(pass))
                              {
     
            message = "Connection réussie";
            JOptionPane.showMessageDialog(null,""+ message );
     
                            }
                           else { message = "Connection échouée";
            JOptionPane.showMessageDialog(null,""+ message );
     
                           }
                                      }
                                            rs1.close(); s1.close();rs.close(); s.close();         
            }
     
     
     
                           else{
                               message = "Le nom entré n'est pas dans la base de donnée";
            JOptionPane.showMessageDialog(null,""+ message );
                           }
                           }
            }
                              catch(Exception e) {System.err.println(e);}
                              finally { if (conn != null) {
                    try {
                        conn.close(); System.out.println("Connexion terminée");}
                           catch(Exception e) {System.err.println ("Pb de fermeture de connexion ");}
                        }                
                }  
     
     
        }
     
     
    }
    Le problème c'est que log prend toutes les valeurs de la bdd. Ainsi si je met le 3eme nom de la base de donnée, cela me met que le nom n'est pas dans la base de donnée

    Merci de votre aide

  2. #2
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 301
    Points : 75
    Points
    75
    Par défaut
    J'ai essayé comme dans le tutoriel d'utiliser la méthode execute qui renvoi true s'il y a un résultat et false sinon mais quand je met un login qui n'est pas dans la base de donnée ca me met rien au lieu de me mettre "Le nom n'est pas dans la base de donnée

    Vous pouvez m'aider svp
    merci

    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
     
    public void Identif(String login, String pass) {
                  Connection conn = null;
                  String message = new String();
                  ResultSet resultSet = null;
     
            try {         
                  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                  conn = DriverManager.getConnection("jdbc:odbc:BiorG","","");
                  System.out.println("Connexion établie avec BiorG");
                  Statement s = conn.createStatement ();
                  boolean rs =  s.execute ("SELECT Utilisateurs.Password, Utilisateurs.Login FROM Utilisateurs WHERE (Utilisateurs.Login)=\'"+login+"\'");
                    if(rs){
                        resultSet = s.getResultSet();
     
     
                                      while (resultSet.next()){ 
                                String mdp = resultSet.getString ("Password");
                            String log = resultSet.getString("Login");
                                 System.out.println("fct" + log);
                              if (mdp.equals(pass))
                              {
     
            message = "Connection réussie";
            JOptionPane.showMessageDialog(null,""+ message );
     
                            }
                           else { message = "Connection échouée";
            JOptionPane.showMessageDialog(null,""+ message );
     
                           }
                                      }
                                          resultSet.close(); s.close();         
            }
     
                    else{
      message = "Le nom n'est pas dans la bdd";
            JOptionPane.showMessageDialog(null,""+ message );
       }             
     
            }        
     
     
                              catch(Exception e) {System.err.println(e);}
                              finally { if (conn != null) {
                    try {
                        conn.close(); System.out.println("Connexion terminée");}
                           catch(Exception e) {System.err.println ("Pb de fermeture de connexion ");}
                        }                
                }  
     
     
        }

  3. #3
    Membre confirmé Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Points : 474
    Points
    474
    Par défaut
    Dans ta boucle while ( resultset.next() ) il te manque une condition d'arrêt si tu as trouvé un login et un mot de passe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ...
    boolean trouve = false ;
    while ( resultset.next() && !trouve)
    {
       ...
       if ( resultset.getString("password").equals(password) )
       {
          System.out.println("Connexion OK") ;
          trouve = true ;
       }
       else
          ...
    }

  4. #4
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 301
    Points : 75
    Points
    75
    Par défaut
    ok mais si je fais ca et que je rentre un nom qui n'est pas dans la bdd, il ne se passe rien

    je n'ai pas le message d'erreur "Le nom n'est pas dans la bdd"

  5. #5
    Membre confirmé Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Points : 474
    Points
    474
    Par défaut
    Citation Envoyé par sissi25
    ok mais si je fais ca et que je rentre un nom qui n'est pas dans la bdd, il ne se passe rien

    je n'ai pas le message d'erreur "Le nom n'est pas dans la bdd"
    Alors tu fais comme ça :
    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
    ...
    boolean trouve = false ;
    while ( resultset.next() && !trouve)
    {
       ...
       if ( resultset.getString("password").equals(password) )
       {
          trouve = true ;
       }
    }
     
    if ( trouve )
        System.out.println("Connexion OK") ;
    else
        System.out.println("Le nom n'est pas dans la bdd") ;

  6. #6
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 301
    Points : 75
    Points
    75
    Par défaut
    oui mais ca met le message d'erreur si je rentre un mauvais mot de passe. Si je rentre un mauvais nom, ca ne fait rien

  7. #7
    Membre éclairé
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Points : 756
    Points
    756
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ( (resultset.getString("password").equals(password)) && (resultset.getString("login").equals(login))  )
    C'est pas très propre car tu auras un message d'erreur pour 3 cas: mauvais mot de passe, mauvais login, mauvais login et mauvais mot de passe.

    Mais disons que pour l'instant ça pourrait aller je te conseille de faire quelques recherches sur google sur du code existant pour t'aider aussi.

  8. #8
    Membre confirmé Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Points : 474
    Points
    474
    Par défaut
    Citation Envoyé par sissi25
    oui mais ca met le message d'erreur si je rentre un mauvais mot de passe. Si je rentre un mauvais nom, ca ne fait rien
    Ben justement, c'est ça la sécurité ! Quand tu rentres un mauvais login, il faut pas dire que le login existe pas. Il faut dire "Mauvais login ou mot de passe". De même, quand le login est bon mais pas le mot de passe, si tu dis que tu as donné un mauvais mot de passe, alors le pirate sait que ce login existe et ça sera plus facile pour lui de pirater !

  9. #9
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 301
    Points : 75
    Points
    75
    Par défaut
    ok c'est vrai
    tu as raison

    mais pour ma curiosité personnelle (ca fait un bon moment que je suis dessus ... )

    comment je pourrai faire pour afficher un message d'erreur quand on rentre un mauvais login ????

  10. #10
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 301
    Points : 75
    Points
    75
    Par défaut
    pourquoi est ce que ce code ne fonctionne pas ?

    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
     
            try {
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                conn = DriverManager.getConnection("jdbc:odbc:BiorG","","");
                System.out.println("Connexion établie avec BiorG");
                Statement s = conn.createStatement();
                rs = s.execute("SELECT Utilisateurs.Password, Utilisateurs.Login FROM Utilisateurs WHERE (Utilisateurs.Login)=\'"+login+"\' AND (Utilisateurs.Password)=\'"+pass+"\'");
                if (rs){
                    resultSet = s.getResultSet();
                    message = "Connection réussie";
                    JOptionPane.showMessageDialog(null,""+ message );
                } else { message = "Connection échouée";
                JOptionPane.showMessageDialog(null,""+ message );
                }            
                resultSet.close(); s.close();                      
            }
    il y a un pb au niveau du if(rs) parce que j'ai toujours connection réussie meme si le mdp et le login ne correspondent pas

    merci de votre aide

  11. #11
    Membre éclairé
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Points : 756
    Points
    756
    Par défaut
    Il faudrait appliquer le resulSet sur rs et non sur s. De plus, il faudrait vérifier qu'il ne renvoie rien ce resultSet.

  12. #12
    Membre confirmé Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Points : 474
    Points
    474
    Par défaut
    Citation Envoyé par sissi25
    ok c'est vrai
    tu as raison

    mais pour ma curiosité personnelle (ca fait un bon moment que je suis dessus ... )

    comment je pourrai faire pour afficher un message d'erreur quand on rentre un mauvais login ????
    Tout est une histoire d'algorithme, il faut réfléchir un peu :
    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
    ...
    resultset = s.executeQuery( "Select * from LOGIN WHERE login='"+login+"'" ) ;
    boolean loginFound = false ;
    boolean trouve = false ;
    while ( resultset.next() && !trouve)
    {
       loginFound = true ;
       ...
       if ( resultset.getString("password").equals(password) )
       {
          trouve = true ;
       }
    }
     
    if ( trouve )
        System.out.println("Connexion OK") ;
    else if ( !loginFound )
        System.out.println("Le login n'est pas dans la bdd") ;
    else
         System.out.println("Login trouvé, mais mauvais mot de passe")
    Le mieux reste de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    resultset = s.executeQuery( "Select * from LOGIN WHERE login='"+login+"' AND password='"+password+"'" ) ;
    if ( resultset.next() )
       System.out.println("Connexion OK") ;
    else
       System.out.println("Mauvais login ou mot de passe") ;

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

Discussions similaires

  1. [AJAX] Authentification avec ajax
    Par devvanjier dans le forum AJAX
    Réponses: 2
    Dernier message: 29/10/2011, 06h32
  2. [debutant] problème avec une requête
    Par boulette85 dans le forum Langage
    Réponses: 6
    Dernier message: 07/06/2007, 22h41
  3. [debutant]Problème avec une requete ....
    Par MichMich29 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 27/07/2005, 17h19
  4. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29
  5. Problème avec une procédure stockée
    Par in dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/05/2003, 15h33

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