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 :

servlet de controle d'authentification


Sujet :

Servlets/JSP Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 39
    Points : 31
    Points
    31
    Par défaut servlet de controle d'authentification
    Bonjour,
    j'essaye de dévelpper une servlet qui récupere a partir d'une jsp deux variable (login/mot de passe), vérifie si ces deux paramètres existe dans une base de données mysql, si c'est bon, redirèction vers une page d'acceuil.

    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
     
    package parefeu.idtest;
     
    import java.sql.*;
    import java.io.IOException;
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    public class Testid extends HttpServlet 
    {
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 1L;
    	// parametres d'instance
    	String urlReponse = null;
     
    	public void init() 
    	{
    	// on recupere les parametres d'initialisation de la servlet
    	ServletConfig config = getServletConfig();
    	urlReponse = config.getInitParameter("urlReponse");
     
    	}
     
    	public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException 
    	{
    		// on recupere les parametres du formulaire
    		String login = request.getParameter("login");
    		String pwd = request.getParameter("pwd");
     
    		try
    		{
    			Connection Conn =  DriverManager.getConnection("jdbc:mysql://localhost:3306/parefeu","bassam","fedora");
     
    			Statement Stmt = Conn.createStatement();
     
    			ResultSet RS = Stmt.executeQuery("select * from compte");
     
    			int compte_ok=0;
    			while(RS.next())
    		    {			
    				if(RS.getString("login").equals(login) && RS.getString("pwd").equals(pwd))
    				{
    					compte_ok=1;
    				}
    		    }
     
    			if(compte_ok==1)
    			{
    				getServletContext().getRequestDispatcher(urlReponse).forward(request,response);
    				return;
    			}
    			Stmt.close();
    			Conn.close();
     
    		}catch(SQLException E){};
     
    	}
    	public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException,
    	ServletException 
    	{
    	// on passe la main au GET
    		doGet(request, response);
    	}
    }
    Mais ceci ne marche pas, et je crois que je commence a plenté .
    Si quelqu'un a une idée je prend, merci.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Points : 540
    Points
    540
    Par défaut
    Quest-ce qui ne marche pas ? Qu'elle est l'erreur générée ?

    Sinon tu peux utiliser un boolean plutôt que de faire "int compte_ok=0" et de la passer à 1 si succès.

    Par ailleurs pour plus de lisibilité, les noms d'instances commencent toujours par une minuscule. Exemple : "Connection conn" et non "Connection Conn", ...

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    slt,
    le code ne genere pas d'erreur mais la redirection ne s'affectue pas.
    merci.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Points : 540
    Points
    540
    Par défaut
    Qu'elle est la valeur de "urlReponse" ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    "urlReponse" est initialisée a partir du fichier web.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <init-param>
    <param-name>urlReponse</param-name>
    <param-value>/acceuil.jsp</param-value>
    </init-param>

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Points : 540
    Points
    540
    Par défaut
    Tu peux remplacer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    catch(SQLException E){}
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    catch(SQLException E) {
        E.printStackTrace();
    }
    Pour voir si une exception est levée à ce niveau...

  7. #7
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Plusieurs choses :

    - tu devrais prendre l'habitude de faire commencer tes propriétés par une minuscule (convention java)
    - tu fais une lecture de tous tes enregistrement alors que tu pourrais directement filter sur le login
    - ta connexion peut ne pas être fermée (en cas d'erreur), il faudrait utiliser un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Connection conn = null;
    try
    {
       conn = DriverManager.getConnection(...);
    }
    catch (Exception e)
    {
       // ce que tu dois faire
    }
    finally
    {
       if ( conn != null ) conn.close();
    }
    Enfin dans ton exemple, si le login / mot de passe sont faux, tu ne rediriges sur rien... pas top...

    A+

  8. #8
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    il y a une exception qui se lance au niveau de la console d'eclipse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/parefeu
    mais j'ai le connecteur jdbc "mysql-connector-java-3.0.17-ga-bin.jar" sous le repertoire "/root/workspace/parefeu/WEB-INF/lib", et les autres servlets marchent bien comme il faut.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Points : 540
    Points
    540
    Par défaut
    Essaies déjà ce code (c'est un peu plus propre quoi qu'il serait bon d'isoler tes paramètres de connexion) :

    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
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException 
    {
    	// on recupere les parametres du formulaire
    	String login = request.getParameter("login");
    	String pwd = request.getParameter("pwd");
     
    	// register JDBC driver
    	try {
    		Class.forName("com.mysql.jdbc.Driver");
    	} catch (ClassNotFoundException e) {
    		e.printStackTrace();
    	}
     
    	Connection conn = null;
    	Statement stmt = null;
    	ResultSet rs = null;
    	boolean compteOk = false;
    	try
    	{
    		conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/parefeu","bassam","fedora");
    		PreparedStatement pstmt = conn.prepareStatement(
    				"select * from compte "+
    				"where login= ? and pwd= ?");
    		pstmt.setString(1, login);
    		pstmt.setString(2, pwd);
    		rs = pstmt.executeQuery();
    		// si il y a un résultat c'est OK
    		compteOk = rs.next();
    	}
    	catch(SQLException sqle)
    	{
    		sqle.printStackTrace();
    	}
    	finally
    	{
    		if (rs != null)
    			try{rs.close();}catch (SQLException e){}
    		if (stmt != null)
    			try{stmt.close();}catch (SQLException e){}
    		if (conn != null)
    			try{conn.close();}catch (SQLException e){}
    	}
    	if(compteOk)
    		getServletContext().getRequestDispatcher(urlReponse).forward(request,response);
    	else
    		getServletContext().getRequestDispatcher("XXXX").forward(request,response);
    }
    Il est bon de passer par un PreparedStatement pour éviter l'SQL Injection, surtout pour une authentification.

  10. #10
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 39
    Points : 31
    Points
    31
    Par défaut probleme resolu
    Tout marche parfaitement, merci pour ton aide, c'est vraiment gentil.

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

Discussions similaires

  1. servlet pour authentification sur google apps
    Par houssem-biz dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 02/05/2008, 13h50
  2. Réponses: 2
    Dernier message: 18/01/2008, 15h59
  3. Authentification et controle d'acces
    Par K-Kaï dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 26/07/2006, 13h20
  4. [Servlet] Authentification a chaque acces
    Par bourbaki2003 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 18/07/2006, 11h21
  5. [jsp]controles des formulaires servlet ou javascript ?
    Par alexandra_ape dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 05/07/2004, 14h46

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