Créer une page de connexion pour une application web

Fermé
ti_mouton Messages postés 143 Date d'inscription vendredi 29 mai 2015 Statut Membre Dernière intervention 5 septembre 2020 - Modifié le 4 sept. 2020 à 21:19
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 5 sept. 2020 à 13:31
Bonjour,

Pour un projet je dois réaliser une application web en Java sous IDE ECLIPSE avec Driver Jdbc. La premiere étape est de permettre à l'utilisateur de se connecter, et pour moi c'est le flou total...

Dans ma couche DAL j'ai construit la classe UtilisateurDAOJdbcImpl :
public class UtilisateurDAOJdbcImpl implements UtilisateurDAO {

private static final String SQL_SELECT_LOGIN="select * from UTILISATEURS where pseudo=?, mot_de_passe=?";

public Utilisateur selectByLogin(String pseudo, String motDePasse) throws BusinessException {
Utilisateur profil = null;
try(Connection cnx = ConnectionProvider.getConnection()){
PreparedStatement pstmt = cnx.prepareStatement(SQL_SELECT_LOGIN);
pstmt.setString(1, pseudo);
pstmt.setString(2, motDePasse);
ResultSet rslt = pstmt.executeQuery();
if(rslt.next()) {
profil = map(rslt);
}
}catch (Exception e) {
e.printStackTrace();
BusinessException be = new BusinessException();
be.ajouterErreur(CodeResultatDAL.LECTURE_OBJET_ECHEC);
throw be;
}
if(profil==null) {
BusinessException be = new BusinessException();
be.ajouterErreur(CodeResultatDAL.ERREUR_LOGIN);
throw be;
}
return profil;
}

}



Puis dans ma couche BLL j'ai créé une classe UtilisateurManager avec le code suivant :
public class UtilisateurManager {

private UtilisateurDAO utilisateurDAO;

public UtilisateurManager(){
this.utilisateurDAO = DAOFactory.getUtilisateurDAO();
}

public Utilisateur seConnecter(String pseudo, String motDePasse) throws BusinessException {
if(pseudo!=null || motDePasse!=null) {
BusinessException be = new BusinessException();
be.ajouterErreur(CodeResultatBLL.SAISIE_LOGIN_MP_OBLIGATOIRE);
throw be;
}
if(utilisateurDAO.selectByLogin(pseudo, motDePasse)==null) {
BusinessException be = new BusinessException();
be.ajouterErreur(CodeResultatBLL.SAISIE_LOGIN_MP_UNKNOWN);
throw be;
}

return this.utilisateurDAO.selectByLogin(pseudo, motDePasse);
}

}


Ensuite j'ai créé une Servlet :
@WebServlet("/ServletConnexion")
public class ServletConnexion extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/login.jsp");
rd.forward(request,response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String pseudo=null;
String motDePasse=null;
List<Integer> listeCodesErreurs = new ArrayList<>();

pseudo = request.getParameter("pseudo");
if(pseudo==null || pseudo.trim().isEmpty()) {
listeCodesErreurs.add(CodeResultatServlet.FORMAT_IDENTIFIANT_ERREUR);
}

motDePasse = request.getParameter("motDePasse");
if(motDePasse==null || motDePasse.trim().isEmpty()) {
listeCodesErreurs.add(CodeResultatServlet.FORMAT_MOT_DE_PASSE_ERREUR);
}

if(listeCodesErreurs.size()>0)
{
//Je renvoie les codes d'erreurs
request.setAttribute("listeCodesErreurs",listeCodesErreurs);
RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/login.jsp");
rd.forward(request, response);
}
else {
//j'affiche le profil
UtilisateurManager utilisateurManager = new UtilisateurManager();
try {
utilisateurManager.seConnecter(pseudo, motDePasse);
RequestDispatcher rd = request.getRequestDispatcher("/ServletListeEncheres");
rd.forward(request, response);
} catch(BusinessException be) {
be.printStackTrace();
request.setAttribute("listeCodesErreurs", be.getListeCodesErreur());
RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/login.jsp");
rd.forward(request,response);
}
}
}

}


Et enfin la JSP "login.jsp" pour afficher la page de connexion:
<title>Page de connexion</title>
</head>
<body>
<div class="col-sm-6 text-align:left">
<h1>ENI-Encheres</h1>
</div>
<div class="container col-sm-6 col-sm-offset-3">
<form action="fr.eni.javaee.projet_encheres.servlets/ServletConnexion" method="post">
<fieldset class="form-group">
<label for="pseudo">Identifiant </label>
<input type="text" name="identifiant" id="identifiant" size="30" maxlength="30" required="required" autofocus="autofocus" autocomplete="off">
</fieldset>
<fieldset class="form-group">
<label for="motDePasse">Mot de Passe</label>
<input type="password" name="motDePasse" id="motDePasse" size="30" maxlength="30" required="required" autocomplete="off">
</fieldset>
<fieldset class="form-group">
<input type="submit" value="Connexion">
</fieldset>
</form>
</div>
</body>


Quelqu'un peut il m'aider à reconstruire mon code, car comme je m'y attendais ça ne fonctionne pas du tout ...

Merci d'avance pour votre aide
A voir également:

6 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
4 sept. 2020 à 23:04
Bonjour,

Je n'ai pas de PC sous la main et il manque de toute façon trop de code que tu ne nous as pas transmis pour tester, mais est-ce que tu pourrais nous lister tous les fichiers (pas leur contenu) que tu as créé afin de voir dans quels dossiers ils sont.
Par exemple en utilisant la commande
jar tvf tonAppliWeb.war
0
ti_mouton Messages postés 143 Date d'inscription vendredi 29 mai 2015 Statut Membre Dernière intervention 5 septembre 2020
5 sept. 2020 à 08:49
Bonjour,

voici la liste des fichiers (je n'ai pas reussie à utiliser la commande).


merci
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
5 sept. 2020 à 09:41
Déjà dans le META-INF tu ne devrais avoir pas avoir de fichier HTML ou CSS, ils devraient être dans WebContent avec jquery et bootstrap.

Est-ce que tu pourrais copier-coller le contenu des fichiers web.xml et contexte.xml

Après si tu pouvais expliquer le problème que tu as, si tu as des erreurs au démarrage par exemple, savoir lesquelles c'est.

De plus, est ce que tu es absolument contraint de faire un serveur à l'ancienne avec Eclipse ou est ce que tu as un peu de liberté ?
Vu ton code (JSP &co) je te conseillerai cette architecture : Exemple simple d'application JSTL, ça n'empêche pas bien sûr d'utiliser Eclipse et ton code ne changerai pas, mais l'exécution du serveur pour tester le programme sera grandement facilité.
0
ti_mouton Messages postés 143 Date d'inscription vendredi 29 mai 2015 Statut Membre Dernière intervention 5 septembre 2020
5 sept. 2020 à 10:06
Ok j'ai modifié l'emplacement des fichiers.

Voici le code du fichier web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>ProjetEncheres</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>


Et celui du fichier contexte.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Ressource
name ="jdbc/pool_cnx"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
type="java.sql.DataSource"
url="jdbc:sqlserver://localhost;databasename=PROJET_ENCHERES"
username="root"
password="root"

maxTotal="1000"
maxIdle="30"
maxWaitMillis="10000"

/>

</Context>


Quand je lance ma Servlet ma page web s'affiche, et quand j’inscris un pseudo et un mot de passe et que je clique sur connexion il me renvoi un page "404 Not Found servletconnexion indisponible"

Merci
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
5 sept. 2020 à 10:29
Dans ta JSP cette ligne est incorrecte :
<form action="fr.eni.javaee.projet_encheres.servlets/ServletConnexion" method="post">

La classe que tu dois appeler doit être configurée dans le web.xml et c'est l'URL configurée que tu dois appeler dans le form :
    <servlet>
        <display-name>Connexion</display-name>
        <servlet-name>ConnexionServlet</servlet-name>
        <servlet-class>fr.eni.javaee.projet_encheres.servlets/ServletConnexion</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ConnexionServlet</servlet-name>
        <url-pattern>/connexion</url-pattern>
    </servlet-mapping>

<form action="connexion" method="post">
0
ti_mouton Messages postés 143 Date d'inscription vendredi 29 mai 2015 Statut Membre Dernière intervention 5 septembre 2020
5 sept. 2020 à 10:37
J'ai effectué les modifications, mais toujours le même code erreur "404 La ressource demandée [/connexion] n'est pas disponible"
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
5 sept. 2020 à 10:46
Je me suis trompé en copiant collant, il ne faut pas mettre de / mais un . pour le nom de la classe
<servlet-class>fr.eni.javaee.projet_encheres.servlets.ServletConnexion</servlet-class>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ti_mouton Messages postés 143 Date d'inscription vendredi 29 mai 2015 Statut Membre Dernière intervention 5 septembre 2020
5 sept. 2020 à 11:12
ok j'ai modifié mais toujours la meme erreur
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
5 sept. 2020 à 12:18
Je n'avais pas vu que tu utilisais les annotations @WebServlet donc on va partir là dessus.

Supprimes la servlet du fichier web.xml (au passage tu peux supprimer les welcome-file aussi)

Avec l'annotation
@WebServlet("/ServletConnexion")
c'est donc
<form action="ServletConnexion" method="post">
qu'il faudrait indiquer.
0
ti_mouton Messages postés 143 Date d'inscription vendredi 29 mai 2015 Statut Membre Dernière intervention 5 septembre 2020
Modifié le 5 sept. 2020 à 12:47
ah enfin ça fonctionne ! Merci !
Enfin ca fonctionne... disons que je n'ai plus de page d'erreur, c'est déjà un bon début!

Par contre mon code pour établir la connexion doit avoir beaucoup d'erreurs car quand j'indique un pseudo et mp qui font pourtant bien partis de ma base de données il me réaffiche ma page de connexion...

Il faudrait que j'utilise un objet HttpSession, ainsi qu'un mot de passe de type "ecryptedPassword" mais honnetement je n'ai aucune idée de comment mettre ça en place dans mon Modèle DAO.
Des conseils ?

Merci beaucoup
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
5 sept. 2020 à 13:31
Si tu retournes sur la page de connexion c'est que tu rentres dans le
catch(BusinessException be)
donc tu dois avoir la stack trace de l'exception qui s'affiche, ça permet de cerner le problème.

Dans le code d'exemple que j'ai cité tout à l'heure il y a une utilisation de HttpSession dans ResultAction.java tu devrais regarder comment c'est fait.

Quant à la sécurisation du mot de passe, tu peux regarder les MessageDigest, exemple ici : SHA-256 Hashing in Java
0