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

Servlets/JSP Java Discussion :

Problème authentification via servlet


Sujet :

Servlets/JSP Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2012
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 60
    Points : 36
    Points
    36
    Par défaut Problème authentification via servlet
    Bonsoir tout le monde,
    Je travaille actuellement sur un projet JEE et je bloque sur l'utilisation des servlets.

    Pour faire bref, mon projet est divisé selon le modèle MVC, j'utilise 4 paquets: MODELE, METIER, DAO(l'accès à la BD), et PRESENTATION(pour les servlets).
    eb bref, j'ai une page jsp, pour l'authentification d'un auteur, celle là fait appel à la servlet qui devra faire appel à la classe du paquet DAO pour verifier le mot de passe et login, puis me rediriger soit vers ma page d'acceuil, soit vers une page d'erreur.

    Bon, je vous passe mes classes et servlet espérant que vous puissiez m'aider

    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
     
     
    package pfe.cms.dao;
     
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.util.Collection;
    import pfe.cms.model.Auteur;
     
    public interface IAuteurDAO extends IMembreDAO{
        public Auteur retrieve(long codeAuteur);
        public Collection<Auteur> getListeAuteur()throws SQLException;
        public void getArt_Auteur(Auteur auteur,Connection con)throws SQLException;
     
    }
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
     
     
    package pfe.cms.dao.oracle;
     
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.List;
    import pfe.cms.dao.AbstractDataBaseDAO;
    import pfe.cms.dao.IAuteurDAO;
    import pfe.cms.dao.IRubriqueDAO;
    import pfe.cms.model.Article;
    import pfe.cms.model.Auteur;
    import pfe.cms.model.Rubrique;
     
     
    public class OracleAuteurDAO extends AbstractDataBaseDAO implements IAuteurDAO{
     
        @Override
        public Auteur retrieve(long codeAuteur) {
            Connection con=null;
            Auteur auteur=null;
            try{
                con=ds.getConnection();
                Statement stmt=con.createStatement();
                ResultSet res=stmt.executeQuery("select * "
                        + "from Auteur where id_Auteur="+codeAuteur);
                if(res.next()){
                    auteur=new Auteur(codeAuteur,res.getString("nom_auteur"),res.getString("nom_prenom"),res.getString("adr_auteur"),res.getString("mail_auteur"),res.getString("login_auteur"),res.getString("pw_auteur"));
                    getArt_Auteur(auteur, con);//pr avoir la liste des articles??
                }
     
            }catch(SQLException ex){
                System.out.println("pb d'accés au données à l'Auteur:"+codeAuteur+" "+ex);
            }finally{
                closeConnection(con);
            }
            return auteur;
        }
     
        @Override
        public int AddMembre(String nom, String prenom, String adr, String mail, String login, String pw) {
            Connection con=null;
            try{
                con=ds.getConnection();
                Statement stmt=con.createStatement();
                int res=stmt.executeUpdate("insert into auteur(nom_auteur,prenom_auteur,adr_auteur,mail_auteur,login_auteur,pw_auteur)values('"+nom+"','"+prenom+"','"+adr+"','"+login+"','"+pw+"')");
                return res;
            }catch(SQLException ex){
                System.out.println("pb d'insertion  "+ex);
                return 0;
            }finally{
                closeConnection(con);
            }
        }
     
        @Override
        public void modifyMembre(long codeAuteur, String nom, String prenom, String adr, String mail, String login, String pw) {
            Connection con=null;
            try{
                con=ds.getConnection();
                Statement stmt=con.createStatement();
                stmt.execute("update Auteur set nom_auteur='"+nom+"',prenom_auteur='"+prenom+"',adr_atueur='"+adr+"',mail_auteur='"+mail+"',login_auteur='"+login+"',pw_auteur='"+pw+"' where id_auteur="+codeAuteur);
            }catch(SQLException ex){
                System.out.println("Modification: pb d'accés au données de l'Auteur :"+codeAuteur+" "+ex);
            }finally{
                closeConnection(con);
            }
        }
     
        @Override
        public void deleteMembre(long codeAuteur) {
            Connection con=null;
            try{
                con=ds.getConnection();
                Statement stmt=con.createStatement();
                stmt.execute("delete from Auteur where id_auteur="+codeAuteur);
            }catch(SQLException ex){
                System.out.println("Suppression: pb d'accés au données de l'Auteur :"+codeAuteur+" "+ex);
            }finally{
                closeConnection(con);
            }
        }
     
        @Override
        public Collection<Auteur> getListeAuteur() throws SQLException {
            Connection con=null;
            List<Auteur> auteurs = new ArrayList<Auteur>();
            try{
                con=ds.getConnection();
                Statement stmt=con.createStatement();
                ResultSet res=stmt.executeQuery("select id_auteur from Auteur");
                while(res.next()){
                    auteurs.add(retrieve(res.getLong(1)));
                }
                return auteurs;
            }finally{
                closeConnection(con);
            }
     
        }
     
        @Override
        public void getArt_Auteur(Auteur auteur, Connection con) throws SQLException {
            Statement stm=con.createStatement();
            ResultSet rs=stm.executeQuery("select * from Article where id_auteur="+auteur.getId_membre());
            while(rs.next()){
                if(auteur.taille==auteur.compteur_tab_art){
                    Article temps[]=new Article[auteur.taille];
                    System.arraycopy(auteur.tab_arts, 0, temps, 0, auteur.taille);
                    auteur.taille+=20;
                    auteur.tab_arts=new Article[auteur.taille];
                    System.arraycopy(temps, 0,auteur.tab_arts, 0, auteur.taille);  
                }
                IRubriqueDAO rubDAO=new OracleRupriqueDAO();
                Rubrique rub=rubDAO.retrieve(rs.getLong("id_rub"));
                boolean etat=("A".equalsIgnoreCase(rs.getString("etat")));
                boolean mur=("O".equalsIgnoreCase(rs.getString("mur")));
                auteur.tab_arts[auteur.compteur_tab_art++]=new Article(rs.getLong("id_art"),rs.getString("titre"),rs.getString("contenu"), auteur, rub,etat,mur);
        }
     
     }
     
        @Override
        public boolean retrieve(String login, String pw)throws SQLException{
            Connection con=null;
            try{
                con=ds.getConnection();
                Statement stmt=con.createStatement();
                ResultSet res=stmt.executeQuery("select login_auteur,pw_auteur from Auteur where login_auteur='"+login+"'");
                if(login.equals(res.getString("login_auteur")) && pw.equals(res.getString("pw_auteur"))){
                    return true;
                }
                else
                    return false;
            }finally{
                closeConnection(con);
            }
        }
     
     
    }
    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
     
     
    package pfe.cms.metier;
     
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.util.Collection;
    import javax.sql.DataSource;
    import pfe.cms.dao.DataSourceDeTest;
    import pfe.cms.dao.IAuteurDAO;
    import pfe.cms.dao.oracle.OracleAuteurDAO;
    import pfe.cms.model.Auteur;
     
     
    public class AuteurMetier implements IAuteurMetier{
        DataSource ds=new DataSourceDeTest("system","ijlal");
        IAuteurDAO dao=new OracleAuteurDAO();
     
        public AuteurMetier() {
            dao.setDataSource(ds);
        }
     
     
        @Override
        public Auteur retrieve(long codeAuteur) {
            return dao.retrieve(codeAuteur);
     
        }
     
        @Override
        public Collection<Auteur> getListeAuteur() throws SQLException {
            return dao.getListeAuteur();
        }
     
     
        @Override
        public int AddMembre(String nom, String prenom, String adr, String mail, String login, String pw) {
            return dao.AddMembre(nom, prenom, adr, mail, login, pw);
        }
     
        @Override
        public void modifyMembre(long codeMembre, String nom, String prenom, String adr, String mail, String login, String pw) {
            dao.modifyMembre(codeMembre, nom, prenom, adr, mail, login, pw);
        }
     
        @Override
        public void deleteMembre(long codeMembre) {
            dao.deleteMembre(codeMembre);
        }
     
        @Override
        public boolean retrieve(String login, String pw) throws SQLException {
            return dao.retrieve(login, pw);
        }
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    package pfe.cms.metier;
     
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.util.Collection;
    import pfe.cms.model.Auteur;
     
     
    public interface IAuteurMetier extends IMembreMetier{
        public Auteur retrieve(long codeAuteur);
        public Collection<Auteur> getListeAuteur()throws SQLException;
    }
    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
     
     
    package pfe.cms.model;
     
     
    public class Auteur extends Membre{
     
        public Article tab_arts[];
        public int taille=20;
        public int compteur_tab_art=0;
     
        public Auteur(long id_membre, String nom, String prenom, String adr, String mail, String login, String pw) {
            super(id_membre, nom, prenom, adr, mail, login, pw);
            this.tab_arts=new Article[taille];
        }
     
        public Auteur(String nom, String prenom, String adr, String mail, String login, String pw) {
            super(nom, prenom, adr, mail, login, pw);
            this.tab_arts=new Article[taille];
        }
     
     
    }
    et enfin la 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
    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
     
     
    package pfe.cms.presentation;
     
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.SQLException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import pfe.cms.metier.AuteurMetier;
    import pfe.cms.metier.IAuteurMetier;
     
     
    public class Auteur_TableauDeBord extends HttpServlet {
     
         private static final long serialVersionUID=1L;
          IAuteurMetier metier = new AuteurMetier();
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
     
            String login = request.getParameter("aut_log");
            String pw = request.getParameter("aut_pw");
           try {
     
              if(metier.retrieve(login,pw))
             {
                         request.getRequestDispatcher("/vues/Auteur_TableauDeBord.jsp").forward(request, response);
                     } else{
                         request.getRequestDispatcher("/vues/ErreurAuthentification.jsp").forward(request, response);
                     }
           } catch (SQLException ex) {
               System.out.println(ex.getMessage());
            }
        }
     
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doPost(request, response);
        }
     
        @Override
        public String getServletInfo() {
            return "Short description";
        }
    }

    Sachant que la servlet marche à merveille si j'enlève cette déclaration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     IAuteurMetier metier = new AuteurMetier();
    avant même que j'ajoute l'accès à la base de données via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(metier.retrieve(login,pw))
    donc j'imagine que l'erreur est quelque part dans les classes mais j'arrive vraiment as à la trouver, je m'y perds depuis 3jours

    oups j'ai oublié de mentionner l'erreur.... euuu en fait il n'y a pas d'erreur, tout simplement quand je rentre le login et le mot de passe et je valide j'obtient une page blanche sans la moindre erreur et l'url est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      http://localhost:19520/TestPFE4/Auteur_TableauDeBord
    Merci pour toutes réponses

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 241
    Points : 399
    Points
    399
    Par défaut
    Bonjour,

    Dans un premier temps, que contiennent tes JSP? Si possible, positionne un contenu distinctif sur ces 2 JSPs. Je suis prêt à parier que ta page blanche de résultat correspond bien à l'une de ces deux pages. ( pour avoir un redirect HTTP, c'est plutôt du coté de la HttpServletResponse#sendRedirect() qu'il faut regarder ).

    Dans un second temps, est-ce qu'il ne serait pas préférable de regarder du côté de la fonctionnalité de sécurité JEE, qui correspond aux security-constraints, security-role et login-config, plutôt que de recoder une gestion de l'identification à la main?

    Enfin, au titre de l'évaluation de ton code source:
    • Il faut souligner la bonne pratique de libération de ressource, via ta méthode AbstractDataBaseDAO.closeConnection()
    • Documente ton code façon javadoc, c'est un investissement à long terme.
    • Evite les attributs public, le modifier public sur les méthodes d'une interface est redondant, préfère un système de logging plutôt que System.out/System.err ( à défaut ServletContext.log() ou java.util.logging.Logger )


    Bon courage,
    Sébastien

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2012
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 60
    Points : 36
    Points
    36
    Par défaut
    Merci pour ta réponse, j'avais fini par perdre espoire

    Bon, pour commencer, c'est ma toute première application JEE, d'où mes mauvaises manières pour le traitement de l'authentification je ne connais que le framework JAAS, j'ai passé toute une nuit à essayer de le comprendre mais en vain, donc j'ai opté pour ce moche traitement

    concernant les pages jsp, voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Auteur_Authentification
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    <%@page import="java.util.List"%>
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
     
        <head>
     
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <link rel="stylesheet" type="text/css" href="css3/style.css">
            <link rel="stylesheet" type="text/css" href="style.css" media="all"/>
        </head>
        <body>
            <div id="header">
                <h1><a href="index.html" id="sitetitle">Test Site 2 </a></h1>
                <ul>
                    <li class="current">
                        <a href="Auteur_TableauDeBord.jsp">Home</a>
                    </li>
                    <li>
                        <a href="about.html">About</a>
                    </li>
                    <li>
                        <a href="contact.html">Contact</a>
                    </li>
                </ul>
            </div>
            <div id="body">
                <div id="home">
                    <h1> A<span>thentification auteur </span> </h1>
     
                </div>
            </div>
     
            <div id="conteneur">
                <center>
                    <div id="conn" >
     
                        Authentification Auteur au back office
     
                        <hr>
                        <form name="auth" action="./Auteur_TableauDeBord" method="post">
                            <center>
                                <table >
                                    <tr>
                                        <td> Login   : </td>
                                        <td><input type="text" value="" name="auteur_log" ></td>
                                    </tr>
                                    <tr>
                                        <td>Mot d passe:  </td> 
                                        <td><input type="password" value="" name="auteur_pw" ></td>
                                    </tr>
     
                                    <tr>
                                        <td></td>
                                        <td> <input type="submit" value="Authentification" name="Authentification" id="Auteur_v">
                                            <input type="hidden" name="action" value="choixStatut">
                                        </td>
                                    </tr>
                                </table>
                            </center>
                        </form>
     
                    </div> 
                </center>
            </div>
            <div id="footer">
                <div>
                    <a href="http://freewebsitetemplates.com/go/twitter/" target="_blank" id="twitter">Twitter</a>
                    <a href="http://freewebsitetemplates.com/go/facebook/" target="_blank" id="facebook">Facebook</a>
                    <a href="http://freewebsitetemplates.com/go/googleplus/" target="_blank" id="googleplus">Google+</a>
                </div>
                <p>
                    &copy; Copyright 2013. All rights reserved
                </p>
            </div>
        </body>
    </html>
    et
    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
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
     
        <head>
     
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <link rel="stylesheet" type="text/css" href="css3/style.css">
            <link rel="stylesheet" type="text/css" href="style.css" media="all"/>
        </head>
        <body>
            <div id="header">
                <h1><a href="index.html" id="sitetitle">Test Site 2 </a></h1>
                <ul>
                    <li class="current">
                        <a href="Admin_TableauDeBord.html">Home</a>
                    </li>
                    <li>
                        <a href="about.html">About</a>
                    </li>
                    <li>
                        <a href="contact.html">Contact</a>
                    </li>
                </ul>
            </div>
        <center>
            <div id="body">
     
     
     
                <h1>Tableau de bord auteur</h1>
     
     
            </div>
        </center>
        <div id="footer">
            <div>
                <a href="http://freewebsitetemplates.com/go/twitter/" target="_blank" id="twitter">Twitter</a>
                <a href="http://freewebsitetemplates.com/go/facebook/" target="_blank" id="facebook">Facebook</a>
                <a href="http://freewebsitetemplates.com/go/googleplus/" target="_blank" id="googleplus">Google+</a>
            </div>
            <p>
                &copy; Copyright 2013. All rights reserved
            </p>
        </div>
    </body>
    </html>
    encore une chose, j'ai un doute concernant la connexion à lA BD oracle, en fait j'ai les entités: Categorie, Rubrique, Administrateur et Article, et toutes ont une structure plus ou moins similaire à celle que j'ai posté (celle de l"Auteur".. et donc, chaque méthode ouvre une connexion indépendante, d'où si j'instancie un objet de type "Article", c'est 7 methodes differentes et donc 7 connexions différente.. , j'ai pensé que le problème viendrait de là et donc qu'il faudrait que je code plutôt une classe "connect" qui se chargera de lancer une connexion à la base de données une fois l'application deployée... tout cela est très joli en théorie mais en pratique, j'avoue que je suis totalement perdue

    En fait, je viens de modifier le nom de la .jsp afin de revérifier dans l'URL si c'est sur la servlet ou la .jsp que ça se plante, eh ben c'est bien sur la servlet.....

    Merci infiniment

Discussions similaires

  1. [Security] Authentification via Servlet
    Par Roger_Rabbit dans le forum Spring
    Réponses: 0
    Dernier message: 04/04/2012, 14h26
  2. Problème MySQL via servlet
    Par marouene_ dans le forum Servlets/JSP
    Réponses: 24
    Dernier message: 15/04/2011, 12h28
  3. Problème de connexion à une BD via Servlet
    Par mohamed.abdelilah dans le forum JDBC
    Réponses: 1
    Dernier message: 05/11/2008, 16h04
  4. [LDAP] Problème d'authentification via PHP
    Par navis84 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 21/07/2006, 09h45
  5. Authentification via un serveur LDAP
    Par jh0483 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 16/01/2006, 06h53

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