Cours WebApps-servlets 2014

Transcription

Cours WebApps-servlets 2014
 Architectures
Outils
Java
Servlets
État servlet JSP
Accès BD
Conception
153
Plan
Architectures n-tiers et applications Web
Outils
Java et applications Web
Servlets
État d’un servlet
Les JSP
Accès aux BD avec servlets
Conception
Olivier Perrin, Université de Lorraine LicencePro, 2014
Architectures
Outils
Java
Servlets
État servlet JSP
Accès BD
Conception
HTTP: protocole sans états
HTTP gère les paires requête/réponse
ouverture
‣ requête
‣ réponse
‣ fermeture
‣
HTTP: protocole sans états
aucun historique des différentes requêtes n’est conservé
‣ les requêtes sont totalement indépendantes les unes des autres
‣
Olivier Perrin, Université de Lorraine LicencePro, 2014
154
Architectures
Outils
Java
Servlets
État servlet JSP
Accès BD
Conception
La gestion des états
Une application Web a besoin de savoir
quel utilisateur a émis la requête
‣ les requêtes déjà émises par cet utilisateur
‣ l’état général actuel de l’application
‣
• nombre de visites, nombre de produits vendus, consultés,…
Il faut rajouter à HTTP un mécanisme de gestion des
états
Olivier Perrin, Université de Lorraine LicencePro, 2014
155
Architectures
Outils
Java
Servlets
État servlet JSP
Accès BD
Conception
Techniques de mémorisation
Différentes techniques pour échanger les données
d’identification de la session dans chaque requête:
cookies
‣ réécriture d’URL
‣ champ de formulaire caché (“hidden”)
‣ utilisation des sessions grâce à HttpSession
‣
Olivier Perrin, Université de Lorraine LicencePro, 2014
156
Architectures
Outils
Java
Servlets
État servlet JSP
Accès BD
Conception
Cookie: qu’est-ce qu’un cookie ?
Fragment d’information textuelle échangé entre le client
et le serveur Web
collection de paires nom/valeur
‣ chargés dans la mémoire du client
‣ un cookie permanent est sauvegardé dans un fichier texte sur
le client
‣ partie de l’entête HTTP
‣
Créé à l’origine par Netscape, maintenant RFC 2109
Utilisé pour mémoriser les préférences de l’utilisateur, ou
même l’identifier
Désactivable
Olivier Perrin, Université de Lorraine LicencePro, 2014
157
Architectures
Outils
Java
Servlets
État servlet JSP
Accès BD
Conception
158
Anatomie
Partie
Description
Name
Identité du cookie
Value
Valeur du cookie
Domain
Nom du domaine qui l’a défini
Path
Information sur le chemin
MaxAge
Date d’expiration du cookie
Secure
Vrai si le cookie est transmis avec SSL
Olivier Perrin, Université de Lorraine LicencePro, 2014
Architectures
Outils
Java
Servlets
État servlet JSP
Accès BD
Conception
Cookie et sécurité ?
Jamais interprété ou exécuté: pas de virus
Un cookie est limité à 4KB et les navigateurs se limitent
à 300 cookies (20 par site): pas de surcharge de disque
Bien pour rendre privées des données non sensibles
‣
nom, adresse,… mais pas numéro CB
Ne constitue pas un traitement sérieux de la sécurité
Olivier Perrin, Université de Lorraine LicencePro, 2014
159
Architectures
Outils
Java
Servlets
État servlet JSP
Accès BD
Conception
Utiliser des cookies
Pris en charge par javax.servlet.http.Cookie
Cette classe construit des cookies avec des paires nom/
valeur
public Cookie (String name,
! ! ! ! ! ! String value)
On peut fixer des attributs supplémentaires
‣
void setValue(String val):
• définit la valeur du cookie
‣
void setMaxAge(int expSec):
• nombre de secondes depuis le 01/01/1970,
• par défaut -1 (expire quand on ferme le client),
• 0 supprime le cookie
Olivier Perrin, Université de Lorraine LicencePro, 2014
160
Architectures
Outils
Java
Servlets
État servlet JSP
Méthodes supplémentaires
‣
void setPath(String path)
• définit le chemin
‣
void setSecure(boolean flag)
• true si SSL, false par défaut
‣
void setDomain(String domain)
• définit le domaine
Olivier Perrin, Université de Lorraine LicencePro, 2014
Accès BD
Conception
161
Architectures
Outils
Java
Servlets
État servlet JSP
Accès BD
Envoi de cookie
Méthode addCookie() de la classe
HttpServletResponse
public void
! doGet(HttpServletRequest req,
! ! ! ! HttpServletResponse rep) {
! Cookie c = new Cookie(“nom”, “toto”);
! c.setMaxAge(365*24*3600); ! // 1an
! rep.addCookie(c);
! rep.setContentType(“text/html”);
! …
}
Olivier Perrin, Université de Lorraine LicencePro, 2014
Conception
162
Architectures
Outils
Java
Servlets
État servlet JSP
Accès BD
Conception
Lecture de cookie
Le navigateur envoie automatiquement les cookies
correspondant à domain et path
Un servlet peut récupérer les cookies envoyés
précédemment au navigateur
‣
méthode getCookies() de HttpServletRequest
public Cookie[] getCookies()
Olivier Perrin, Université de Lorraine LicencePro, 2014
163
Architectures
Outils
Java
Servlets
État servlet JSP
Accès BD
Conception
Lecture de cookie (cont.)
Cookie [] cookies = request.getCookies();
String nom = getCookieValue(cookies, "nom", "non trouvé");
...
public static String getCookieValue(
! ! ! ! ! Cookie [] cookies,
! ! ! ! ! String cookieName,
! ! ! ! ! String defaultValue) {
! for(int i=0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
!if(cookieName.equals(cookie.getName())
! ! ! return(cookie.getValue());
! }
return(defaultValue);
}
Olivier Perrin, Université de Lorraine LicencePro, 2014
164
Architectures
Outils
Java
Servlets
État servlet JSP
Accès BD
Conception
Réécriture d’URL
Principe
ajouter dans la chaîne de requête du servlet des informations
permettant d’identifier la session
‣ http://host/path/file?jsessionid=1234&uid=”perrin”
‣ il est accédé par chaque servlet mentionné qui récupère les
informations persistantes (SGBD, fichiers) à partir de cet ID
‣
Avantage
‣
fonctionne même si les cookies sont désactivés
Inconvénients
encodage des URLs (données visibles, caractères autorisés,
longueur)
‣ toutes les pages sont dynamiquement générées
‣ pas de bookmarks possibles
‣
Olivier Perrin, Université de Lorraine LicencePro, 2014
165
Architectures
Outils
Java
Servlets
État servlet JSP
Accès BD
Conception
Champs de formulaires cachés
Principe
‣
on cache les données de session dans les champs “hidden”
<INPUT TYPE=”HIDDEN” NAME=”uid” VALUE=”perrin”
Avantage
‣
fonctionne même si les cookies sont désactivés
Inconvénients
beaucoup de travail
‣ toutes les pages doivent être le résultat de soumission de
formulaires
‣
Olivier Perrin, Université de Lorraine LicencePro, 2014
166
Architectures
Outils
Java
Servlets
État servlet JSP
Accès BD
Conception
Les sessions
Définition d’une session
une série d’interactions liées entre un client et un serveur Web
‣ englobe plusieurs requêtes HTTP sur une période donnée
‣
Utilisées pour mémoriser les actions (requêtes HTTP)
d’un utilisateur unique au cours du temps
‣
exemple: opérations bancaires, caddie,…
Olivier Perrin, Université de Lorraine LicencePro, 2014
167
Architectures
Outils
Java
Servlets
État servlet JSP
Accès BD
Conception
L’interface HttpSession
Les objets HttpSession mémorisent les données de
chaque utilisateur
Fonctionnement similaire à une table de hachage
stockée sur le serveur
À chaque ID de session est associé, via la table de
hachage, l’ensemble des informations de la session
Les objets session résident sur le serveur, et c’est l’objet
request qui maintient les informations
Les sessions sont automatiquement associées au client
via les cookies ou la réécriture d’URL
Olivier Perrin, Université de Lorraine LicencePro, 2014
168
Architectures
Outils
Java
Servlets
État servlet JSP
Accès BD
Conception
Comportement de base des sessions
Accès à l’objet session
‣
appel à request.getSession pour recevoir un objet
HttpSession (table de hachage associée à l’utilisateur)
Extraire les informations associées à une session
‣
appel à getAttribute sur l’objet HttpSession, récupérer la
valeur, vérifier si le résultat est nul
Mémoriser les informations de la session
‣
utiliser setAttribute avec une clé et une valeur
Supprimer les données de la session
removeAttribute supprime une valeur
‣ invalidate pour annuler une session
‣ logout pour déloguer le client de l’application Web
‣
Olivier Perrin, Université de Lorraine LicencePro, 2014
169
Architectures
Outils
Java
Servlets
État servlet JSP
Accès BD
Conception
Obtenir l’objet session
Deux méthodes de HttpServletRequest
HttpSession getSession()
‣
retourne la session courante, si elle n’existe pas, elle est créée
HttpSession getSession(boolean create)
‣
idem sauf que la session n’est créée que si create=true, sinon
retourne null
Olivier Perrin, Université de Lorraine LicencePro, 2014
170
Architectures
Outils
Java
Servlets
État servlet JSP
Accès BD
Conception
Mémoriser et extraire les données
Une fois la session obtenue, on peut mémoriser et
extraire les données grâce aux méthodes de
HttpSession
void setAttribute(String name, Object val)
Object getAttribute(String name)
Exemple
HttpSession session = request.getSession();
session.setAttribute("compteur", compteur);
Integer leCompteur = (Integer)session.getAttribute("compteur");
Olivier Perrin, Université de Lorraine LicencePro, 2014
171
Architectures
Outils
Java
Servlets
État servlet JSP
Accès BD
Conception
Méthodes de HttpServletRequest
isRequestedSessionIdValid()
‣
vrai si l’ID de la session est valide dans le contexte courant
isRequestedSessionIdFromCookie()
‣
vrai si l’ID de la session provient d’un cookie
isRequestedSessionIdFromURL()
‣
vrai si l’ID de la session provient d’un URL
getRequestedSessionId()
‣
retourne l’ID de la session
Olivier Perrin, Université de Lorraine LicencePro, 2014
172
Architectures
Outils
Java
Servlets
État servlet JSP
Accès BD
Conception
Méthodes de HttpSession
isNew()
‣
vrai si nouvelle session
invalidate()
‣
invalide la session et supprime les associations nom/valeur
getMaxInactiveInterval()
‣
retourne l’intervalle maximal d’inactivité en secondes
setMaxInactiveInterval()
‣
définit l’intervalle maximal d’inactivité en secondes
getId
‣
retourne l’identifiant de la session
Olivier Perrin, Université de Lorraine LicencePro, 2014
173

Documents pareils