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