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

avec Java Discussion :

Identification des utilisateurs


Sujet :

avec Java

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2008
    Messages : 64
    Points : 72
    Points
    72
    Par défaut Identification des utilisateurs
    bonsoir tout le monde
    voila j'ai créé une table utilisateur sur ma base de donnée oracle
    pour la connexion ça marche très bien et même l'accès a cet base aussi ca marche mais j'ai un problème dans ce 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
     
    public void actionPerformed(ActionEvent contexte)
    { 
     
        if (contexte.getSource()==quitter)
        {
    		System.exit(0);
        }
        else if ((contexte.getSource()==connexion)||
    		    ((contexte.getSource()==entreenom)||
                              (contexte.getSource()==entreebdd)))
        {
            try
    	{
    	   Connexion con = Connexion.getInstance();
    	   ResultSet curseurJava = con.execute("SELECT * FROM utilisateur");
    	   while (curseurJava.next()) //parcours du curseur
               {			
    	     //System.out.print("PSEUDONYME:"+curseurJava.getString(1));
    	     //System.out.print("MOTDEPASSE :  "    +curseurJava.getString(2));
     
    	        if ((entreenom.getText().equals(curseurJava.getString(1))) && 
    			(entreebdd.getText().equals(curseurJava.getString(2))))
    		{
     
    		     System.out.println("bravo");
    		     break;
    		}
     
    	      }
     
    	curseurJava.close();//Fermeture du curseur
     
     
         }
     
    	        //GESTION DES ERREURS
          catch (SQLException ex)
          {
    	    System.err.println("Erreur:" +ex);
          }
     
     
     
        }
    }
     
    private String text1,text2,text3,text4;
     
    private JButton connexion,quitter;	
    private JTextField entreenom,entreebdd,entreedriver;	
    private JPasswordField entreemotpasse;
    private JLabel nom,motdepasse,basededonnees,driver;
    ce qui marche pas dans ce code c'est au dessus c'est ce bloc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    if ((entreenom.getText().equals(curseurJava.getString(1))) && 
    	    (entreebdd.getText().equals(curseurJava.getString(2))))
    {
     
    	System.out.println("bravo");
    	break;
    }

  2. #2
    Membre éclairé
    Homme Profil pro
    NoOb
    Inscrit en
    Mai 2007
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NoOb

    Informations forums :
    Inscription : Mai 2007
    Messages : 554
    Points : 852
    Points
    852
    Par défaut
    Bonjour,

    Je pense que c'est simplement un problème d'itération:

    Il faudrait plutôt quelquechose comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while (curseurJava.hasNext()) {
    Utilisateur u = curseurJava.next();
     
     // ... ensuite tu travailles sur u.
    }
    Rapide recherche sur le site:

    http://bruce-eckel.developpez.com/li...chap=10&page=5

    http://www.developpez.net/forums/d42...aide-iterator/

  3. #3
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 123
    Points : 77
    Points
    77
    Par défaut
    Il est préférable je pense de faire une requête qui retourne seulement l'utilisateur concerné plutôt que toute la table. Oracle est meilleur pour les comparaisons que Java.

    Je te propose donc:

    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
     
     
    		PreparedStatement pstmt = null;
    		ResultSet rs = null;
    		try {
    			pstmt = cnx.prepareStatement("SELECT user,password FROM utilisateur WHERE user=? AND password=?");
    			pstmt.setString(1, entreenom.getText());
    			pstmt.setString(2, entreebdd.getText());
    			rs = pstmt.executeQuery();
    			if (rs != null && rs.next()) {
    				System.out.println("Un utilisateur a été trouvé")
    			} else {
    				System.out.println("Mauvaix Login/Mot de passe");
    			}
    		} finally {
    			if (rs != null){
    rs.close();
                           }
    			if(cnx!=null){
                                 cnx.close();
                           }
    		}
    Tout d'abord, j'utilise une PreparedStatement, et ma requête contient des ?.
    En utilisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pstmt.setString(1, entreenom.getText());
    Cela permet de remplacer le premier ? par entreenom. Cela evite aussi en partie les injections SQL des vilains pirates
    En effet, entreenom étant une saisie utilisateur, il ne faut jamais faire confiance, et s'assurer qu'aucun code malicieux n'a été saisie

    Ensuite pour le Try Catch Finally. Si une exception survient, on passe dans le catch, et on ne termine pas le code dans Try. Le block finally permet de s'assurer que dans tout les cas Try ou Catch, on execute la fermeture de la base.

    Bon courage

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    a chaque connexion vous aller parcourir l'entièreté de votre table? Bonjour les performances.

    Commencer par utiliser plutot ce genre de requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select usernae,bdd,password from utilisateurs where username=? and bdd=?
    pour limiter votre résultat à une ligne. Avec un PreparedStatement

    aussi, évitez le select * comme vous le faites, vous n'avez aucune garantie sur l'ordre des colonnes retournées!

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2008
    Messages : 64
    Points : 72
    Points
    72
    Par défaut
    oui , j'ai utilise cet méthode mais le problème c 'est pas le SQl OU la connexion a la base de donnée .une fois que j'ai recouper le mes données sur la table , j'arrive pas a contrôle l'égalité sur ce je tape sur JtextField et mes donnees

    entreenom c'est un JTextField
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if ((entreenom.getText().equals(curseurJava.getString(1))) && 
    	    (entreebdd.getText().equals(curseurJava.getString(2))))
    {
     
    	System.out.println("bravo");
    	break;
    }

  6. #6
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 123
    Points : 77
    Points
    77
    Par défaut
    Honnêtement, préfère la méthode de comparaison dans la requête. C'est bien plus optimisé. et vérifie simplment si la requête te retourne une ligne.

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2008
    Messages : 64
    Points : 72
    Points
    72
    Par défaut j'ai trouve la solution ( et merci pour l'aide )
    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
    if (contexte.getSource()==connexion) {
         String user = entreenom.getText();
     
    	String pass = entreemotpasse.getText();
     
      String req = "SELECT * FROM utilisateur WHERE pseudonyme = '" + user +   "'   AND motdepass = '" + pass + "'";
    		Connexion connexion = Connexion.getInstance();
    	int nb = 0;
    	try {
    	 ResultSet res = connexion.execute(req);
    	while (res.next()) {
    		nb++;
    				}
    	} catch(Exception e)
              {System.err.print(e.getMessage());}
     
    	if(nb == 0) {
    		javax.swing.JOptionPane.showMessageDialog(null, "User ou Mot    
                          de passe incorrect !!!");
    	} else {
    		javax.swing.JOptionPane.showMessageDialog(null, "Connexio établi");
     
     
     
     
    	}
    	}

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Je tiens quand même à préciser, avec votre code, que si je tappe comme mot de passe
    ' OR 1=1
    je serais d'office authentifié, quel que soit le username tappé. Comme précisé, utilisez des preparedstatement, surtout si vous n'y connaissez rien en injection SQL.

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

Discussions similaires

  1. Identification des champs code d'utilisateur et mot de passe
    Par Mairequimby dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 10/04/2012, 10h23
  2. Proxy avec identification des utilisateurs
    Par PasCarJoLuAx dans le forum Achat et Conseils
    Réponses: 0
    Dernier message: 28/10/2011, 18h35
  3. Recherche d'un journal avec identification des utilisateurs
    Par bedeuzi dans le forum Administration
    Réponses: 4
    Dernier message: 31/01/2010, 12h41
  4. Identification des utilisateurs dans MySQL
    Par Ganymede dans le forum Débuter
    Réponses: 8
    Dernier message: 27/08/2008, 11h40
  5. Réponses: 1
    Dernier message: 12/05/2007, 22h34

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