0% ont trouvé ce document utile (0 vote)
4 vues35 pages

Cours Java Session

Le document présente une introduction à la gestion des cookies, des sessions et des filtres dans Java EE. Il explique comment créer et manipuler des cookies et des sessions pour stocker des données utilisateur, ainsi que l'utilisation de filtres pour sécuriser l'accès aux servlets. Des exemples de code et des exercices pratiques sont fournis pour illustrer ces concepts.

Transféré par

ayoubbd1775
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
4 vues35 pages

Cours Java Session

Le document présente une introduction à la gestion des cookies, des sessions et des filtres dans Java EE. Il explique comment créer et manipuler des cookies et des sessions pour stocker des données utilisateur, ainsi que l'utilisation de filtres pour sécuriser l'accès aux servlets. Des exemples de code et des exercices pratiques sont fournis pour illustrer ces concepts.

Transféré par

ayoubbd1775
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

JEE : cookies, sessions et filtres

Achref El Mouelhi

Docteur de l’université d’Aix-Marseille


Chercheur en programmation par contrainte (IA)
Ingénieur en génie logiciel

[Link]@[Link]

H & H: Research and Training 1 / 24


Plan

1 Introduction

2 Cookies

3 Sessions

4 Filtres

H & H: Research and Training 2 / 24


Introduction

JEE

Objectif
H I ©
ELque soit
Savoir stocker et récupérer des données quel
U
l’emplacement : Servlet, JSP...
L MO
e f
Sécuriser l’accès à notre
r E
application Web en installant des filtres
sur les Servletsch
©A

H & H: Research and Training 3 / 24


Cookies

JEE

Les cookies
H I ©
un cookie est un fichier que l’on enregistreE
U Ll’ordinateur du
sur
visiteur pour une longue durée.
L MO
il permet généralementfdeE
r e sauvegarder des données sur le
chpermet de l’identifier lors de sa prochaine visite
visiteur qui nous
© A

H & H: Research and Training 4 / 24


Cookies

JEE

Pour créer un cookie


Cookie cookie = new Cookie("nom", "wick");

H I ©
UEL
L MO
h refE
A c
©

H & H: Research and Training 5 / 24


Cookies

JEE

Pour créer un cookie


Cookie cookie = new Cookie("nom", "wick");

H I ©
UEL
MO
Pour stocker un cookie
[Link](cookie);
fE L
c h re
© A

H & H: Research and Training 5 / 24


Cookies

JEE

Pour créer un cookie


Cookie cookie = new Cookie("nom", "wick");

H I ©
UEL
MO
Pour stocker un cookie
[Link](cookie);
fE L
c h re
© A
Modifier la durée d’un cookie (par défaut la durée d’une session)
[Link](60*60*24);

H & H: Research and Training 5 / 24


Cookies

JEE
Pour rendre le cookie inaccessible en JavaScript (réduire les risques de faille
XSS)

[Link](true);

H I ©
UEL
L MO
h refE
A c
©

H & H: Research and Training 6 / 24


Cookies

JEE
Pour rendre le cookie inaccessible en JavaScript (réduire les risques de faille
XSS)

[Link](true);

H I ©
UEL
Pour récupérer des données stockées dans des cookies

Cookie cookies [] = [Link]();


L MO
h refE
A c
©

H & H: Research and Training 6 / 24


Cookies

JEE
Pour rendre le cookie inaccessible en JavaScript (réduire les risques de faille
XSS)

[Link](true);

H I ©
UEL
Pour récupérer des données stockées dans des cookies

MO
Cookie cookies [] = [Link]();
L
h re fE
A c
©
Pour chercher un cookie

for(int i= 0 ; i < [Link]; i++) {


if (cookies[i].getName().equals("nom")) {
...
}
}

H & H: Research and Training 6 / 24


Cookies

JEE

Pour récupérer le nom d’un cookie


[Link]();
H I ©
UEL
L MO
h refE
A c
©

H & H: Research and Training 7 / 24


Cookies

JEE

Pour récupérer le nom d’un cookie


[Link]();
H I ©
UEL
L MO
e f Ecookie
Pour récupérer la valeur d’un
r
A
[Link]();ch
©

H & H: Research and Training 7 / 24


Sessions

JEE

Les sessions
un moyen de conserver des données relatives à un visiteur sur
toutes les pages de notre site H I ©
UEL
MO
ces données seront enregistrées sur le serveur
L
pour chaque session, on
r e f E
peut associer une infinité de variables de
h (primitif, objet, tableau d’objets...)
session de toutctype
A
©
ces variables seront détruites, si le visiteur se déconnecte, s’il
dépasse une certaine durée...

H & H: Research and Training 8 / 24


Sessions

JEE
Considérons l’objet de type Personne suivant

Personne personne = new Personne (100, "wick", "john");

H I ©
UEL
L MO
h refE
A c
©

H & H: Research and Training 9 / 24


Sessions

JEE
Considérons l’objet de type Personne suivant

Personne personne = new Personne (100, "wick", "john");

Pour créer une variable session


H I ©
HttpSession session = [Link]();
UEL
L MO
h refE
A c
©

H & H: Research and Training 9 / 24


Sessions

JEE
Considérons l’objet de type Personne suivant

Personne personne = new Personne (100, "wick", "john");

Pour créer une variable session


H I ©
HttpSession session = [Link]();
UEL
L MO
h refE
Pour ajouter l’objet personne dans la session
A c
©
[Link]("perso", personne);

H & H: Research and Training 9 / 24


Sessions

JEE
Considérons l’objet de type Personne suivant

Personne personne = new Personne (100, "wick", "john");

Pour créer une variable session


H I ©
HttpSession session = [Link]();
UEL
L MO
h refE
Pour ajouter l’objet personne dans la session
A c
©
[Link]("perso", personne);

Pour récupérer une donnée de session (dans une Servlet)

[Link]("perso");

H & H: Research and Training 9 / 24


Sessions

JEE

Pour récupérer une donnée de session (dans une JSP)

<%
Personne p = (Personne) [Link]("perso");
[Link](p);
%>
H I ©
UEL
L MO
h refE
A c
©

H & H: Research and Training 10 / 24


Sessions

JEE

Pour récupérer une donnée de session (dans une JSP)

<%
Personne p = (Personne) [Link]("perso");
[Link](p);
%>
H I ©
UEL
L MO
h refE
Pour récupérer une donnée de session (dans une JSP avec EL)

${ [Link] }
A c
©

H & H: Research and Training 10 / 24


Sessions

JEE

Pour récupérer une donnée de session (dans une JSP)

<%
Personne p = (Personne) [Link]("perso");
[Link](p);
%>
H I ©
UEL
L MO
h refE
Pour récupérer une donnée de session (dans une JSP avec EL)

${ [Link] }
A c
©
Pour détruire une session

[Link]();

H & H: Research and Training 10 / 24


Sessions

Exercice

1 Créer un nouveau projet Java EE.

2 Créer trois Servlets FirstServlet, SecondServlet et ThirdServlet accessibles


respectivement via les chemins first, second et third.

Créer une vue [Link] contenant un formulaire d’authentification (nom d’utilisateur et


©
3
mot de passe) et placer la directement dans webapp.
H I
4
UEL
À la soumission du formulaire, les données seront envoyées au doPost() de
FirstServlet.

L MO
5
doit s’authentifier.
h re fE
Pour accéder à n’importe quelle page de l’application (hormis [Link]), l’utilisateur

A c
6

7
©
S’il réussit à s’authentifier, il sera enregistré dans la session.

Créer trois vues [Link], [Link] et [Link] dans WEB-INF appelées


respectivement par FirstServlet, SecondServlet et ThirdServlet.

8 Dans chaque vue ([Link], [Link] et [Link]), on affiche le nom de la


vue, le nom de l’utilisateur connecté, deux liens pour naviguer vers les autres vues et un
lien de déconnexion.

H & H: Research and Training 11 / 24


Sessions

JEE

Remarques

I ©
Le code qui permet de vérifier si le nom d’une personne est dans la
H
UEL
session + redirection est répétitif : dans toutes les Servlets

L MO
h refE
A c
©

H & H: Research and Training 12 / 24


Sessions

JEE

Remarques

I ©
Le code qui permet de vérifier si le nom d’une personne est dans la
H
UEL
session + redirection est répétitif : dans toutes les Servlets

L MO
h refE
Solution A c
©
Utiliser les filtres pour tester avant d’arriver dans la Servlet

H & H: Research and Training 12 / 24


Filtres

JEE

Filtre
Classe Java implémentant l’interface Filter ayant les méthodes
init(), destroy(), doFilter()

H I ©
UEL
Défini par rapport à une URL (soit dans le fichier [Link], soit
avec l’annotation @WebFilter()

L MO
h refE
s’exécute avant la Servlet ayant la même URL

A c
Un filtre avec l’URL /* se lance avant toutes les Servlets de
l’application©
Une fois l’exécution du filtre est terminé, il passe la main à un
autre, avec la méthode [Link]() (s’il en existe), sinon
c’est la Servlet qui sera exécutée.

H & H: Research and Training 13 / 24


Filtres

JEE

Vue Modèle
(page JSP) (Java Bean)

H I ©
UEL
MO
Filter
L
Requête
h refE
HTTP
A c
© Contrôleur
(Servlet)

Réponse
HTTP
Client Serveur

H & H: Research and Training 14 / 24


Filtres

JEE

Création d’un filtre sous Eclipse


Faire un clic droit sur src situé dans Java Resources de notre
projet
H I ©
UEL
MO
Aller dans New et choisir Filter

fE L
Remplir le champ Java package: par [Link]
c h re
© A
Remplir le champ Class name: par un nom suffixé par le mot
Filter : PrivateFilter (par example)
Cliquer sur Next

H & H: Research and Training 15 / 24


Filtres

Code généré

@WebFilter("/PrivateFilter")
public class PrivateFilter implements Filter {

public PrivateFilter() {
// TODO Auto-generated constructor stub
}
public void destroy() {
// TODO Auto-generated method stub
H I ©
UEL
}

response,
L MO
public void doFilter(ServletRequest request, ServletResponse
FilterChain chain) throws IOException,
ServletException {

h refE
// TODO Auto-generated method stub
// place your code here
A c
©
// pass the request along the filter chain
[Link](request, response);
}
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}

H & H: Research and Training 16 / 24


Filtres

JEE

Les filtres

I ©
Supprimer toutes les méthodes de filtre et garder seulement
H
doFilter()
UEL
L MO
Implémenter cette dernière pour qu’elle vérifie si un nom est dans
la session
h re fE
c
Alancé avant l’exécution de toutes les URL sauf
Filtre doit être
©affichent
celles qui et vérifient le formulaire d’authentification

H & H: Research and Training 17 / 24


Filtres

JEE
Contenu d’[Link]

<%@ page language="java" contentType="text/html; charset=ISO


-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
H I ©
UEL
<head>
<title>Home page</title>
</head>
L MO
fE
<body>
<h1>Home page</h1>
c
<form action=first method=post> h re
© A
<input type=text name=nom placeholder="saisir nom"><br>
<input type=password name=pwd placeholder="saisir mot de
passe"><br>
<button type="submit"> Connection </button>
</form>
</body>
</html>

H & H: Research and Training 18 / 24


Filtres

Contenu de FirstServlet
@WebServlet("/first")
public class FirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
// TODO Auto-generated method stub
getServletContext().getRequestDispatcher("/WEB-INF/[Link]").
forward(request, response);
H I ©
UEL
}
protected void doPost(HttpServletRequest request, HttpServletResponse

// TODO Auto-generated method stub


L MO
response) throws ServletException, IOException {

h refE
String nom = [Link]("nom");
String pwd = [Link]("pwd");

A c
if ([Link]("wick") && [Link]("john")) {
©
[Link]().setAttribute("nom", nom);
getServletContext().getRequestDispatcher("/WEB-INF/[Link]").
forward(request, response);
}
else
getServletContext().getRequestDispatcher("/[Link]").forward(
request, response);
}
}
H & H: Research and Training 19 / 24
Filtres

JEE
Contenu de [Link] (même logique pour [Link] et [Link])
<!DOCTYPE html>
<html>
<head>
<title>First page</title>
</head>
<body>
<h2>First page</h2>
H I ©
UEL
<c:out value="Bonjour ${ [Link] }"/>

MO
<div>
<c:url value="second" var="second" />
<a href="${ second }"> second </a>
fE L
</div>
<div>
c h re
© A
<c:url value="third" var="third" />
<a href="${ third }"> third </a>
</div>
<div>
<c:url value="deconnect" var="deconnect" />
<a href="${ deconnect }"> déconnexion </a>
</div>
</body>
</html>

H & H: Research and Training 20 / 24


Filtres

JEE
Contenu de SecondServlet (même logique pour ThirdServlet)

@WebServlet("/second")
public class SecondServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

H I ©
UEL
protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
// TODO Auto-generated method stub
L MO
fE
getServletContext().getRequestDispatcher("/WEB-INF/[Link]").

re
forward(request, response);
}
A c h
©
protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}

H & H: Research and Training 21 / 24


Filtres

JEE
Contenu de PrivateFilter

@WebFilter("/*")
public class PrivateFilter implements Filter {

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)


throws IOException, ServletException {

HttpServletRequest req = (HttpServletRequest) request;

H I ©
UEL
HttpServletResponse res = (HttpServletResponse) response;
HttpSession session = [Link]();

MO
// on récupère le nom de la session

L
String nom = (String)[Link]("nom");

re fE
// on récupère le chemin demandé par l'utilisateur

h
String chemin = [Link]();

A c
// on récupère la méthode HTTP utilisée (GET ou POST)

©
String methode = [Link]();

if (nom != null || [Link]("/") || [Link]("/[Link]") || [Link]("/


first") && [Link]("POST"))
[Link](request, response);
else
[Link]([Link]());
}
}

H & H: Research and Training 22 / 24


Filtres

JEE

On peut aussi supprimer l’annotation @WebFilter et utiliser le


[Link] comme pour les Servlets
<filter>
<filter-name>PrivateFilter</filter-name>
H I ©
UEL
<filter-class>[Link]</
filter-class>
L MO
</filter>
h re fE
c
©A
<filter-mapping>
<filter-name>PrivateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

H & H: Research and Training 23 / 24


Filtres

JEE

Remarques

H I ©
Si on a plusieurs filtres sur une même URL, l’ordre de vérification

UEL
est l’ordre de déclaration de la section filter-mapping dans

MO
[Link].

fE L
Si on a plusieurs filtres sur une même URL, et qu’on utilise
h re
l’annotation @WebFilter, il faut quand-même préciser l’ordre
c
A
d’exécution dans [Link] en ajoutant une section
©
filter-mapping pour chaque filtre.

H & H: Research and Training 24 / 24

Vous aimerez peut-être aussi