TP d’applications web : Sessions

On souhaite modifier l’application de la manip 6 pour conserver le nom de l’utilisateur dans une session plutôt qu’un cookie.
  1. Modifier le servlet CheckUser pour qu’au lieu de créer un cookie il ajoute un attribut de clé "utilisateur" à la session, contenant le nom de l’utilisateur loggué : HttpSession session = request.getSession(); session.setAttribute("utilisateur", name);
  2. Modifier le servlet Bilan.java pour qu’il refuse de répondre si l’utilisateur n’est pas identifié, c’est-à-dire si la clé "utilisateur" n’est pas définie dans la session.

    Refuser de répondre se fait en envoyant un statut HTTP autre que « 200 OK ». Cela peut éventuellement être une erreur. Ici on se contentera de rediriger vers une autre URL (en utilisant le code HTTP 302 Found), ce qui se fait avec la méthode sendRedirect("url") de la classe HttpServletResponse :

    String name = (String) session.getAttribute("utilisateur"); if (name != null) { ... } else { response.sendRedirect("login.html"); }
  3. Ajouter à CheckUser une méthode isLoginValid() qui vérifie si le nom d’utilisateur et le mot de passe sont corrects (vous pouvez écrire ce que vous voulez dans cette méthode pour le moment, on verra en manip 8 comment utiliser une base de données pour répondre). S’ils sont incorrects, on ne crée pas la clé "utilisateur" dans la session et on affiche un message d’erreur.
  4. Créer un servlet Logout qui détruit la session (en utilisant session.invalidate()) et ajouter un lien pour se délogguer sur la page principale. N’oubliez pas qu’en plus de détruire la session, le servlet doit envoyer une réponse au navigateur (cette réponse peut éventuellement être une redirection).

Testez à chaque étape. En particulier vérifiez bien qu’il est impossible au final d’accéder au bilan après s’être déloggué ou bien en ayant fourni un mot de passe incorrect.