Spring MVC: Utilisateur:Connexion ,Session

Les étapes à suivre

  1. 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(...)
  2. 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
  3. 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
  4. 4Créer la vue utilisteurs/connexion.jsp pour afficher pour afficher le formulaire de connexion
  5. 5Créer la méthode deconnexion() GET dans le controller UtilisateurController.java qui permet de vider la session
  6. 6Sécuriser les méthodes ajouter,supprimer,modifier ,vendre... dans les controlleur :
    ProduitController
    UtilisateurController
    VenteControllerController
  7. 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>








Cours et TPs