Discussion: Probléme DAO JEE

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    mars 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2018
    Messages : 1
    Points : 3
    Points
    3

    Par défaut Probléme DAO JEE

    Salut tout le monde,

    Je suis en train de préparer mon projet fin d'étude, mais j'ai un problème, donc je vais que l'administrateur se connecter pour pouvoir utiliser l'application, mais n'importe que l'email et le mot de passe entré et chaque fois que je clique sur connecter l'application me rédige vers la page d’accueil, je crois que le problème est au niveau de DAO exactement au niveau de la requête SELECT, une idée SVP ?

    voici le 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
    public Administrateur getAdministrateurByEmail(String email, String motPasse){
             Administrateur administrateur = new Administrateur();     
     
                try {
                    connection = ConnectionManager.getConnection();
                    ResultSet resultSet = connection.createStatement(
                    ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_READ_ONLY).executeQuery("select * FROM administrateur where email = " + email+" and motPasse ="+motPasse);
     
                  if(resultSet.first()){
                    administrateur = new Administrateur(
                      email, motPasse,
     
                              resultSet.getInt("id"),
                              resultSet.getString("nom"),
                              resultSet.getString("prenom"),
                              resultSet.getString("motPasse"),
                              resultSet.getString("adminPic"));  
                          }
                } catch (SQLException e) {
                  e.printStackTrace();
                }
                return administrateur;
            }
    ou bien au niveau du Servlet ? :

    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
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");
            try (PrintWriter out = response.getWriter()) {
                //récupere les résultat
                String email=request.getParameter("email");
                String motPasse=request.getParameter("motPasse");
     
                String forward="";
     
                Administrateur administrateur = dao.getAdministrateurByEmail(email,motPasse);
                request.setAttribute("administrateur", administrateur);
     
                if (administrateur!=null)  {
                    forward="/acceuilAdmin.jsp";
                   }
                else {
                    forward="/index.html";
                }
                RequestDispatcher view = request.getRequestDispatcher(forward);
                view.forward(request, response);
            }
        }

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    janvier 2007
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2007
    Messages : 566
    Points : 606
    Points
    606

    Par défaut

    Bonjour,

    Tu vas à ta page de garde parce
    administrateur = null
    quand tu quittes ta fonction getAdministrateurByEmail(...).

    Et il peut valoir null,
    soit parce que tu as une erreur SQL et dans ce cas, tu peux la lire à l'écran (dans ta console) grâce au e.printStacktrace() ou dans les logs de ton serveur web,
    soit parce que – et c'est ce que je pense – tu n'as pas d'enregistrement ayant ce profil et ce mot de passe dans la table administrateur de ta base, et c'est pour cela que tu dois retourner administrateur = null.

    Fais un essai avec un profil et un mot de passe qui sont dans ta base.

  3. #3
    Membre confirmé
    Avatar de provirus
    Homme Profil pro
    Consultant informatique
    Inscrit en
    février 2009
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : février 2009
    Messages : 244
    Points : 588
    Points
    588

    Par défaut

    Bonjour,

    Premièrement, ne concatène jamais du texte fournis par les utilisateurs dans ta requête SQL ; sinon, tu invites les gens à faire de l'injection SQL.
    Par exemple, je pourrais remplir le formulaire avec le mot de passe: " ' or ''=' " et ta requête retournerait tous les utilisateurs. Je serais donc un utilisateur au hasard (le premier retourné).
    Il faut plutôt utiliser une requête paramétrée ("select * FROM administrateur where email = ? and motPasse = ?") et passer les arguments en paramètres.

    Ensuite, le problème est surement que tu passes du texte sans les mettre entre apostrophes:
    "select * FROM administrateur where email = '" + email+"' and motPasse ='" + motPasse + "'"
    Si tu utilises une requête paramétrée, tu n'auras pas besoin des apostrophes.

  4. #4
    Membre expérimenté Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Agitateur technique spécialisé Java et (micro)Services
    Inscrit en
    novembre 2007
    Messages
    868
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Agitateur technique spécialisé Java et (micro)Services
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : novembre 2007
    Messages : 868
    Points : 1 459
    Points
    1 459

    Par défaut



    Bonjour, attention effectivement à deux choses :

    1. comme l'a dit provirus, ne jamais concaténer des chaînes SQL ou JPQL avec un "input" de l'utilisateur ... C'est la faille n°1 de l'OWASP (injection SQL) que tu ouvres. C'est
    2. ne jamais stocker le mot de passe en clair en base de données : utiliser un Hash de type bcrypt à la place. Plus d'info sur ce site : https://crackstation.net/hashing-security.htm


    Mais ce sont tes études : ces erreurs sont formatrices !

    Bon courage !
    Moins on code, moins il y a de bug ... et vice-versa ainsi qu'inversement ...

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

Discussions similaires

  1. Problème projet JEE
    Par azrtui dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 13/07/2013, 16h14
  2. Problème dao, liste avec doublons
    Par velocity dans le forum Java EE
    Réponses: 1
    Dernier message: 12/07/2012, 11h21
  3. Problème avec JEE et jBoss
    Par dabdallas dans le forum JBoss
    Réponses: 1
    Dernier message: 21/02/2011, 08h43
  4. Problème installation JEE SDK 5 sous WindowsXP
    Par malikoo dans le forum Général Java
    Réponses: 5
    Dernier message: 27/10/2008, 11h10
  5. Problème Connection 4D par DAO
    Par ballmaster dans le forum 4D
    Réponses: 3
    Dernier message: 23/06/2006, 10h54

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