Spring MVC: Utilisateur:Connexion ,Session
Les étapes à suivre
- 1Créer une méthode dans CrudRepository.java pour vérifier l'email le password pour cela on a deux solutions:
1.Redéfinition des méthodes génériques dans UtilisateurRepository.java: Utilisateur findUtilisateurByEmailAndPassword(String email,String password);
2.Créer la méthode connexion(String emai,String password) puis ajouter la requête SQL avec @Query(...) - 2Créer la méthode connexion() GET dans le controller UtilisateurController.java qui permet d'afficher le formulaire de connexion de la vue utilisteurs/connexion.jsp
- 3Créer la méthode connexion() POST dans le controller UtilisateurController.java qui permet de récupérer les données saisies dans la vue utilisteurs/connexion.jsp et appler la méthode findUtilisateurByEmailAndPassword pour vérifier les données de la connexion
- 4Créer la vue utilisteurs/connexion.jsp pour afficher pour afficher le formulaire de connexion
- 5Créer la méthode deconnexion() GET dans le controller UtilisateurController.java qui permet de vider la session
- 6Sécuriser les méthodes ajouter,supprimer,modifier ,vendre... dans les controlleur :
ProduitController
UtilisateurController
VenteControllerController
- 7Ajouter un lien pour se déconnecter dans les vues:
produits/
produits/ajouter
produits/modifier
ventes/vendre
...
1.Définir la signature de la méthode connexion(String emai,String password) dans l'interface UtilisateurRepository.java
/*Afinde vérifier le login et le mot de passe d'un utilisateur on peut :
1.Créer la méthode connexion() et ajouter la requête SQL avec l'annotation
@Query
2.utiliser les méthodes générique de CrudRepository:
*/
//1.
@Query("select u from Utilisateur u where email= :email and password= :password")
Utilisateur connexion(@Param("email") String email,@Param("password") String password);
//2.
//select * from utilisateur where email=email and password=password
Utilisateur findUtilisateurByEmailAndPassword(String email,String password);
/*On peut redéfinir plusieur méthodes génériques comme:*/
/*select * from utilisateur where nom=nom*/
Utilisateur findUtilisateurByNom(String nom);
/*select * from utilisateur where nom=nom or prenom=prenom*/
Utilisateur findUtilisateurByNomOrPrenom(String nom,String prenom);
2.Créer la méthode connexion() GET dans le controller UtilisateurController.java
/*utilisateur/login/ */
@RequestMapping(value="/login")
public String connexion(HttpSession session)
{
/*HttpSession session :permet de gérer les sessions dans l'application:
ajouter des variables de session
Vérifier si une variable de sessio existe
vider la session
*/
/*Vérifier s'il existe la variable de session userConnecte*/
if(session.getAttribute("userConnecte")!=null)
{
/*si l'utilisateur est déjà connecté on affiche la page liste vente */
return "redirect:/ventes/liste";
}
/*userConnecte:est null dans l'utilisateur n'est pas connecté donc on affiche
la vue connexion*/
return "utilisateurs/connexion";
}
3.Créer la méthode connexion() POST dans le controller UtilisateurController.java
//utilisateur/connexion avec POST
@RequestMapping(value="/connexion",method=RequestMethod.POST)
public String connexion(
/*Recupérer les paramètres envoyées par le formulaire de connexion*/
@RequestParam Map<String, String> inputs,
/*Envoyer des message avec une redirection à une autre route*/
RedirectAttributes re,
//Gérer les sessions :stocker la session de l'utilisateur connecté
HttpSession session)
{
//récuper les inputs envoyées par le formulaire de connexion
String email = inputs.get("email");
String password = inputs.get("pasword");
//Cherhcer dans la table utilisateur avec email et password
Utilisateur u=utilisateurRepository.connexion(email,password);
/*on peut appeler aussi la méthode générique de UtilisateurRepository
Utilisateur u=utilisateurRepository.findUtilisateurByEmailAndPassword(email,password);
*/
/*Si l'utilisateur existe pas dans la table utilisateur*/
if(u!=null)
{ /*Créer la variable de session userConnecte et stocké l'objet utilisateur*/
session.setAttribute("userConnecte", u);
/*afficher la page Home qui est liste vente*/
return "redirect:/ventes/liste";
}
/*Utilisateur n'existe pas dans la table utilisateur*/
/* Envoyer un message d'erreur */
re.addFlashAttribute("message","Erreur de connexion");
/*reafficher la page de connexion*/
return "redirect:/utilisateurs/login";
}
4.Créer la vue utilisteurs/connexion.jsp
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<html>
<head>
<title>Connexion</title>
</head>
<body>
<fieldset>
<legend>Connexion</legend>
<form:form method="post" action="${pageContext.request.contextPath}/utilisateurs/connexion" >
<table>
<tr>
<td>Email</td>
<td><input name="email" type="email"/></td>
</tr>
<tr>
<td>Password</td>
<td><input name="pasword" type="password"/></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Valider"/></td>
</tr>
</table>
</form:form>
${message}
</fieldset>
5.Créer la méthode deconnexion() GET dans le controller UtilisateurController.java
/*utilisateurs/deconnexion*/
@RequestMapping(value="/deconnexion")
public String deconnexion(HttpSession session)
{
/*vider la session*/
session.invalidate();
/*afficher la page conexion*/
return "redirect:/utilisateurs/login";
}
6.Sécuriser les méthodes ajouter,supprimer,modifier ,vendre... dans les controlleurs
Afin de sécuriser une méthodes on doit :
1.ajouter dans les paramètre de chaque méthode un objet de type:HttpSession session afin de vérifier la session
2.Vérifier si la variable de session userConnecte déja créer dans la methode connexion Existe sinon faire une redirection vers la page de connexion
/* Exemple :afin de sécurier l'ajout d'un produit */
@RequestMapping("/add")
public String add(Model model,HttpSession session){
/*#####Verifier la connexion ## */
/*Vérifier s'il existe la variable de session userConnecte*/
if(session.getAttribute("userConnecte")==null)
{
/*si l'utilisateur est déjà connecté on affiche la page liste vente */
return "redirect:/utilisateurs/login";
}
/*###FIN###*/
model.addAttribute("produit", new Produit());
return "produits/Ajouter";
}
7.Ajouter un lien pour se déconnecter dans les vues:
<span style="float:right;">Bienvenue ${sessionScope.userConnecte.nom}
<a href="${pageContext.request.contextPath}/utilisateurs/deconnexion">Déconnexion</a>
</span>