Servlet d'authentification avec Mysql
drakerz
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonsoir à tous, je viens de créer une Servlet Login et une page JSP Login afin de permettre l'authentification des utilisateurs qui se sont enregistrés dans ma base de donnée. Le problème de ma Servlet c'est qu'elle ne permet l'authentification que de la dérniére personne s'étant inscrite ... et je ne comprend pas du tout pourquoi !
Et dans un deuxième temps j'aimerai changer la connexion de ma Servlet pour passer par mon fichier persistence.xml
Voici mes codes ! avez vous une idée de l'origine du probléme ?
Ma servlet Login :
Ma page JSP login :
Ma page persistencexml :
Et dans un deuxième temps j'aimerai changer la connexion de ma Servlet pour passer par mon fichier persistence.xml
Voici mes codes ! avez vous une idée de l'origine du probléme ?
Ma servlet Login :
package com.supmessaging.servlet;
import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet(urlPatterns = "/Logintest")
public class Login extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
private ServletConfig config;
public void init(ServletConfig config)
throws ServletException{
// this.config=config;
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException{
PrintWriter out = response.getWriter();
// "configuration" de la connexion à la base de donnée
String connectionURL = "jdbc:mysql://localhost:3306/supmessaging";
Connection connection=null;
ResultSet rs;
//variable locale pour le username et le password
String usrnm=new String("");
String pswd=new String("");
response.setContentType("text/html");
try {
Class.forName("com.mysql.jdbc.Driver");
//Connexion à la base de données
connection = DriverManager.getConnection(connectionURL, "root", "");
// on récupére username et password dans la BDD
String sql = "SELECT username, password FROM users" ;
Statement s = connection.createStatement();
s.executeQuery (sql);
rs = s.getResultSet();
while (rs.next ()){
usrnm=rs.getString("username");
pswd=rs.getString("password");
}
rs.close ();
s.close ();
}catch(Exception e){
System.out.println("Exception is ;"+e);
}
//on compare les usernames et password entrer avec ceux de la ba BDD
if(usrnm.equals(request.getParameter("username")) && pswd.equals(request.getParameter("password"))){
request.getSession().setAttribute("username", usrnm);
out.println("login ok");
}
else{
out.println("login nok");
}
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
RequestDispatcher rd = req.getRequestDispatcher("/login.jsp");
rd.forward(req, resp);
}
}
Ma page JSP login :
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>SupMessaging by MLabs</title>
<link rel="stylesheet" href="./style.css" />
</head>
<body>
<%@ include file="header.jsp" %>
<!-- Main -->
<div id="main" class="main">
<form action="<%= request.getContextPath() %>/Logintest" method="post">
<h2>identifiez vous</h2>
<p>
Nom d'utilisateur :<br>
<input type="text" pattern=".{4,30}" name="username" placeholder="4 caractères minimum." size=30 required>
<br>
Mot de passe :<br>
<input type="password" pattern=".{8,40}" name="password" placeholder="8 caractères minimum." size=30 required>
<br>
<input type="submit" value="Soumettre">
</p>
</form>
</div>
<%@ include file="footer.jsp" %>
</body>
</html>
Ma page persistencexml :
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="PU" transaction-type="RESOURCE_LOCAL">
<properties>
<property name="hibernate.archive.autodetection" value="class" />
<property name="hibernate.format_sql" value="true" />
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/supmessaging" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
</persistence>
A voir également:
- Servlet d'authentification avec Mysql
- Double authentification google - Guide
- Mysql community server - Télécharger - Bases de données
- Code a 6 chiffres application d'authentification instagram - Forum Instagram
- Désactiver l'authentification à deux facteurs instagram sans se connecter ✓ - Forum Instagram
- Application d'authentification facebook - Guide
Il faut d'abord réfléchir en terme de données, ça c'est absolument horrible :
Puisque tu as le username en paramètre, filtre directement ta requête dessus, il ne reste alors plus qu'à comparer le mot de passe avec celui donné :
Ceci est beaucoup mieux car ta base de données n'aura pas à te renvoyer tous les users/mdp, elle te renverra juste un élément (ou aucun), et là dans ce cas tu pourras enlever ta boucle while.
Voici un schéma d'architecture Java EE :
J'ai donc modifié mon code comme tu me la expliqué mais j'ai toujours le même problème...
Pourtant la condition "username = ?" devrait bien permettre de récupérer tout les mots de passe de la colonne ?