Le développement d applications Web. François Charoy Pascal Molli Pascal Urso



Documents pareils
Le développement d applications Web

Web Tier : déploiement de servlets

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

HTTP 1.1. HyperText Transfer Protocol TCP IP ...

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

L3 informatique TP n o 2 : Les applications réseau

Développement des Systèmes d Information

Projet Java EE Approfondi

Cedric Dumoulin (C) The Java EE 7 Tutorial

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

4. SERVICES WEB REST 46

Application Web et J2EE

Java pour le Web. Cours Java - F. Michel

Architecture Orientée Service, JSON et API REST

24/11/2011. Cours EJB/J2EE Copyright Michel Buffa. Plan du cours. EJB : les fondamentaux. Enterprise Java Bean. Enterprise Java Bean.

Applications et Services WEB: Architecture REST

(structure des entêtes)

Failles XSS : Principes, Catégories Démonstrations, Contre mesures

JavaServer Pages (JSP)

ADMINISTRATION DE ADOBE LIVECYCLE MOSAIC 9.5

Gilles.Roussel univ-mlv.fr HTTP/1.1 RFC 2068

Architecture JEE. Objectifs attendus. Serveurs d applications JEE. Architectures JEE Normes JEE. Systèmes distribués

Les architectures 3-tiers Partie I : les applications WEB

WebSSO, synchronisation et contrôle des accès via LDAP

HTTP HTTP. IUT1 dpt SRC L Isle d Abeau Jean-françois Berdjugin. Introduction et architecture Messages Authentification Conclusion

Outil de planification en ligne pour des créations de rendez-vous ou de sondage

Plan. Department of Informatics

Application web de gestion de comptes en banques

Patrons de conception [Krakowiak06]

10. Base de données et Web. OlivierCuré

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

Compte Rendu d intégration d application

OWASP Open Web Application Security Project. Jean-Marc Robert Génie logiciel et des TI

1. Installation d'un serveur d'application JBoss:

Module BD et sites WEB

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Architectures Web Services RESTful

E-TRANSACTIONS. Guide du programmeur API Plug-in. Version 1.1

Jahia CMS ET Portal Version 5.0

Alfstore workflow framework Spécification technique

Single Sign-On open source avec CAS (Central Authentication Service) Vincent Mathieu Pascal Aubry Julien Marchal

Traitement des données de formulaires. Accès aux BD avec JDBC Servlets - M. Baron - Page

Service d'authentification LDAP et SSO avec CAS

Utilisation de Jakarta Tomcat

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

Serveurs de noms Protocoles HTTP et FTP

Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6

INF8007 Langages de script

Le serveur HTTPd WASD. Jean-François Piéronne

Application de lecture de carte SESAM-Vitale Jeebop

Hébergement de sites Web

Environnements de Développement

CAS, un SSO web open source. 14h35-15h25 - La Seine A

Programmation Web. Madalina Croitoru IUT Montpellier

Sécurité des sites Web Pas un cours un recueil du net. INF340 Jean-François Berdjugin

SIO Page 1 de 5. Applications Web dynamiques. Prof. : Dzenan Ridjanovic Assistant : Vincent Dussault

Authentification et contrôle d'accès dans les applications web

Groupe Eyrolles, 2005, ISBN :

A DESTINATION DES SERVICES TIERS. Editeurs d applications et ressources pédagogiques connectées à l ENT

Java Naming and Directory Interface

Présentation du cours. Sécurité dans Java EE. Plan (1/2) Plan (2/2) Généralités sur la sécurité

Architectures en couches pour applications web Rappel : Architecture en couches

Java Aspect Components (JAC)

JOnAS 5. Serveur d application d

Mise en œuvre des serveurs d application

Introduction à HTTP. Chapitre HTTP 0.9

TP WEBSERVICES. 1 Pré-requis. 1.1 L environnement de développement. 1.2 Les librairies nécessaires 1.3 SOAPUI

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Messagerie asynchrone et Services Web

Documentation CAS à destination des éditeurs

Projet de Veille Technologique

ASP.NET MVC 4 Développement d'applications Web en C# - Concepts et bonnes pratiques

API ONE-TIME PASSWORD

WEBSERVICES. Michael Fortier. Master Informatique 2ème année. A308, Université de Paris 13

Aspects techniques : guide d interfaçage SSO

WebDAV en 2 minutes. Tous ces objectifs sont complémentaires et ils sont atteints grâce au seul protocole WebDAV. Scénarii

Hébergement de site web Damien Nouvel

COMPRENDRE L ARCHITECTURE DES WEB SERVICES REST. Amosse EDOUARD, Doctorant

PHP 5.4 Développez un site web dynamique et interactif

Serveur d Applications Web : WebObjects

Refonte front-office / back-office - Architecture & Conception -

Principales failles de sécurité des applications Web Principes, parades et bonnes pratiques de développement

API SMS HTTP REST. Intégrer facilement le service Envoyer SMS Pro avec votre application métier. Version : Révision : 03/09/2014 Page 1/31

Sécurité des Web Services (SOAP vs REST)

Cours Master Recherche RI 7 Extraction et Intégration d'information du Web «Services Web»

Un exemple d'authentification sécurisée utilisant les outils du Web : CAS. P-F. Bonnefoi

1 Introduction Propos du document Introduction De HTTP 1.0 à HTTP

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

Supervision et infrastructure - Accès aux applications JAVA. Document FAQ. Page: 1 / 9 Dernière mise à jour: 15/04/12 16:14

Stockage du fichier dans une table mysql:

Oauth : un protocole d'autorisation qui authentifie?

Manuel d'installation

Titre: Version: Dernière modification: Auteur: Statut: Licence:

Attaques applicatives

Architectures web/bases de données

Réalisation d un portail captif d accès authentifié à Internet

Petite définition : Présentation :

Quick Start Guide This guide is intended to get you started with Rational ClearCase or Rational ClearCase MultiSite.

Transcription:

Le développement d applications Web François Charoy Pascal Molli Pascal Urso

License Creative Commons Cette création est mise à disposition selon le Contrat Paternité-Pas d'utilisation Commerciale-Partage des Conditions Initiales à l'identique 2.0 France disponible en ligne http://creativecommons.org/licenses/by-nc-sa/2.0/fr/ou par courrier postal à Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA. 2 CC by-nc-sa

Plan Historique & objectifs Présentation des Servlets Spécificité Sécurité Les JSP Architecture MVC web Framework JSF 3 CC by-nc-sa

Premier browser sur NeXt 4 CC by-nc-sa

Application Web 5 CC by-nc-sa

Web 1.0 vs Web 2.0 6 CC by-nc-sa

Modèle de conversation 7 CC by-nc-sa

Short History 1980 : HTML 0.9 1990 : Scripts CGI Programmes C, shell scripts, perl,... 1994 : Langages spécifiques ( scripting PHP, JSP, ASP (Server Side ( Scripting JavaScript (Client Side 2002 : Evolutions de HTML XHTML, CSS, JavaScript 8 CC by-nc-sa

Aggrégation 9 CC by-nc-sa

10 CC by-nc-sa

Mashups Composition d'application Web Composition/Filtre de sources de données Composition d'applications Google Maps + bases de données Yahoo Pipes... 11 CC by-nc-sa

Service Web/Rest Exposition des API Exemple : Twitter 12 CC by-nc-sa

Conclusion Les applications Web sont le cœur du Web-2.0 Et ça ne fait que commencer... Pour développer des appli web pertinentes: Vous avez besoin de «comprendre» le web Vous avez besoin de comprendre les problèmes techniques pour faire des applications Web évolutives, sécurisées, tolérantes aux pannes, composable Vous devez comprendre les problèmes spécifiques des applications web pour rendre les applications Web utilisables, maintenable et sûres 13 CC by-nc-sa

Developping Web Applications : Introduction to Servlets 14 CC by-nc-sa

Couches de protocole du WWW Modèle OSI 7. Couche application HTTP 6. Couche de présentation HTML, MIME 5. Couche de session non 4. Couche de transport TCP 3. Couche de réseau IPv4, IPv6 2. Couche de liaison whatever 1. Couche physique whatever 15 CC by-nc-sa

Requête HTTP Quelques lignes de texte Ligne de commande : commande, url, version de protocole Entête de requête [ligne vide] Corps de requête (optionel : paramêtres, appel soap, ) POST /fichier.ext HTTP/1.1 Host: www.site.com Connection: Close Content-type: application/x-www-form-urlencoded Content-Length: 33 <nouvelle ligne> variable=valeur&variable2=valeur2 16 CC by-nc-sa

Commandes HTTP Demande sans effet de bord (en théorie) GET ressource HEAD information sur une ressource OPTIONS options de communication CONNECT utilisation de proxy TRACE journal de serveur Demande avec effet de bord (en théorie) POST soumission de données PUT ajout/màj d une ressource DELETE suppression d une ressource Usuellement seulement GET et POST 17 CC by-nc-sa

Réponse HTTP Quelques lignes de texte Ligne de statut : version de protocole, code, message Entête de réponse [ligne vide] Corps de requête (optionel : ressource, url, rép. soap, ) HTTP/1.0 200 OK Date: Fri, 31 Dec 1999 23:59:59 GMT Server: Apache/0.8.4 Content-Type: text/html Content-Length: 59 <TITLE>Exemple</TITLE> <P>Ceci est une page d'exemple.</p> 18 CC by-nc-sa

Quels sont les problèmes? Protocole HTTP Stateless Clients multiples et inconnus Identification des utilisateurs Maintient des sessions Requêtes et réponses statiques Application distribuée Concurrence d accès Sécurité Passage à l échelle 19 CC by-nc-sa

Les Servlets Permettre la programmation d'applications coté serveur Permettre l'extension d'un serveur Web en java Permettre la construction d'appli Web dynamique ~Equivalent fonctionnel des CGI en java 20 CC by-nc-sa

Ressources Référence http://java.sun.com/javaee API http://java.sun.com/javaee/6/docs/api/ Tutorial http://java.sun.com/javaee/6/docs/tutorial/doc/ Java Specification Requests Servlet http://jcp.org/aboutjava/communityprocess/pfd/jsr315/index.html JSP http://jcp.org/aboutjava/communityprocess/final/jsr245/index.html 21 CC by-nc-sa

Fonctionnement d'un servlet Un servlet lit les données envoyées par un client Web (transmises par le serveur) Données explicites (Formulaire) Données implicites (Request Header) Il génère un résultat Il envoit le résultat au client Données explicites (Page HTML) Données implicites (Response Header, Status code) Serveur Web Database Jndi Java App 22 CC by-nc-sa

Serveur d'application JEE Fournit un ensemble de services pour l'écriture d'application distribuées en Java Nommage Transactions Sécurité Conteneur Web Pourquoi Java? 23 CC by-nc-sa

Avantage des servlets Efficacité Utilisent des threads plutôt que des processus comme les CGI Pratique Librairie très développée (moins que PHP mais plus consistante) Portable Déployable quelque soit le serveur (ou presque) Sécurisé Fonctionne dans une machine virtuelle (plus maitrisable) Pas cher Nombreux serveurs gratuits 24 CC by-nc-sa

L architecture 25 CC by-nc-sa

La partie Web 26 CC by-nc-sa

Les containers de servlet Les servlets sont des composants Ils s'exécutent dans un container Ils doivent se conformer à une interface prédéfinie C est le container qui décide de leur instantiation Les containers Environnement d exécution des servlets ( jakarta.apache.org/tomcat ) Tomcat Jetty Weblogic Glassfish 27 CC by-nc-sa

L exécution d un servlet 28 CC by-nc-sa

Un premier servlet Le servlet HelloWorld Un servlet surcharge la classe HttpServlet Il doit implanter au moins une des méthodes doget dopost doput dodelete 29 CC by-nc-sa

Le servlet HelloWorld 30 CC by-nc-sa

Le fichier de configuration 31 CC by-nc-sa

Servlet 3.0 : annotations Avoid the configuration file 32 CC by-nc-sa

Un module Web Déployable et exécutable dans un serveur Web 33 CC by-nc-sa

L application Web Une archive war Déployée dans le serveur Web Web.xml = description de l application

Structure d une application Package déployable Composants Web : Servlet et JSP Ressources statiques (images) Classes java (helper) Librairies Descripteurs de déploiement (web.xml) 35 CC by-nc-sa

Execution d une requête 36 CC by-nc-sa

Exécution d une requête Objet HttpServlet Objets HttpServletRequest, HttpServletResponse Paramètres de requête, Header de requête Cycle de vie des servlet 37 CC by-nc-sa

La classe HttpServlet 38 CC by-nc-sa

doget et dopost 39 CC by-nc-sa

L'interface HttpServletRequest Fournit les informations sur la requête du client au serveur Principales méthodes (pour l'instant): String getparameter(string name) Enumeration getparameternames() Retourne une énumération de tous les noms de paramètres String[] getparametervalues() Retourne un tableau contenant toutes les valeurs des paramètres String getheader(string name) Enumeration getheadernames() Retourne une énumération de tous les noms des propriétés du header String[] getheadervalues() Retourne un tableau de toutes les valeurs du header 40 CC by-nc-sa

Les paramètres Les paramètres d'une requête sont accessibles dans l'objet (HttpServletRequest) request request.getparameter("paramname"); Il est possible de récupérer tous les noms des paramètres request.getparameternames() 41 CC by-nc-sa

Exemples paramètres 42 CC by-nc-sa

Exemple POST http://www.cs.cornell.edu/projects/ ladis2009/program.htm 43 CC by-nc-sa

Exemple POST (suite) 44 CC by-nc-sa

Nombre de requêtes HTTP : 2 http://localhost:8084/coursweb/formulaire.html (GET) http://localhost:8084/coursweb/myform (POST) 45 CC by-nc-sa

Les request headers 46 CC by-nc-sa

L'interface HttpServletResponse Objet fournissant les services pour envoyer la réponse à un client. Les principales méthodes sont: java.io.printwriter getwriter() Pour récupérer un printwriter qui permet d'envoyer du texte au client public void setcontentlength(int len) Positionne le Content-Length Header public void setcontenttype(java.lang.string type) Position le Content-Type header (exemple text/html) public void senderror(int sc, java.lang.string msg) throws java.io.ioexception Envoi un message d'erreur au client (cf code dans l'api) public void setheader(java.lang.string name, java.lang.string value) 47 CC by-nc-sa

web.xml Le fichier web.xml donne des instructions sur le déploiement du servlet dans le container web-app La description d'une Web Application Servlet La relation entre le nom du servlet et la classe qui l'implante Servlet-mapping La relation entre le nom du servlet et l'url qui permet d'y accéder Servlet 3.0 : remplacement possible par annotations @ Plus «élégant» Moins «modulaire» 48 CC by-nc-sa

Les paramètres d'initialisation Les servlets peuvent avoir des paramètres d'initialisation. Ces paramètres peuvent être changés sans avoir à recompiler l'application <init-param> <param-name>testvalue</param-name> <param-value>12</param-value> <description>une valeur quelconque</description> </init-param> Ces paramètres peuvent être utilisés avec la méthode javax.servlet.servletconfig.getinitparameter() Annotation attribut @WebInitParam 49 CC by-nc-sa

Exemple 50 CC by-nc-sa

Le servlet mapping Permet de construire la relation entre un servlet et son URL <servlet-mapping> <servlet-name>test</servlet-name> <url-pattern>/test/*</url-pattern> </servlet-mapping> Tous les urls correspondant à http://host:port/webapp/url-pattern déclencherons l exécution du servlet Exemples /*.do /Test /cours/test/* 51 CC by-nc-sa

Servlet mapping (annotations) @WebServlet( /foo ) public class A extends HttpServlet { } public void doget(httpservletrequest req, HttpServletResponse res) {... } @WebServlet(name= MyServlet, urlpatterns={"/foo*", "/bar"}, initparams = { @WebInitParam(name="x", value="hello "), @WebInitParam (name="y", value=" World!") }) public class B extends HttpServlet { }... 52 CC by-nc-sa

Les éléments du chemin de requête ContextPath : le chemin du contexte de déploiement ServletPath : la section du chemin qui a déclenché le mapping PathInfo : la partie de la requête qui n est ni le ContextPath ni le ServletPath Request.getContextPath() Request.getServletPath() Request.getPathInfo() 53 CC by-nc-sa

Exemples 54 CC by-nc-sa

Autre propriétés Pour le mapping mime <mime-mapping> Pour les fichiers à charger quand un nom de répertoire est donné <welcome-file-list> Pour les pages d'erreur <error-page> Pour chaque code d'erreur on peut fixer une page spécifique Il y en a d'autres pour La sécurité Les taglibs Les références aux ressources utilisés par les servlets 55 CC by-nc-sa

Le cycle de vie d'un servlet Tous les servlets ont le même cycle de vie Le container charge le servlet La fonction init() est appelée (initialisation de variables, connection à des bases de données) Le servlet répond aux requêtes des clients Le container détruit le servlet La fonction destroy() est appelée (fermeture des connections) 56 CC by-nc-sa

Servlet Life Cycle 57 CC by-nc-sa

Ecrire une application Web 58 CC by-nc-sa

Ecrire une application Web Gestion des paramètres Application Session RequestDispatcher Listeners Filtres Wrapper Erreurs Sécurité 59 CC by-nc-sa

La visibilité (from jguru) 60 CC by-nc-sa

Le ServletConfig Objet utilisé par le container de servlet pour passer des valeurs lors de l'initialisation du servlet Obtenu avec Servlet.getServletConfig() Principales méthodes String getinitparameter(string name) Retourne la valeur d'un paramètre d'initialisation du servlet ServletContext getservletcontext() Permet de récupérer l'objet servletcontext String getservletname() Retourne le nom du servlet comme spécifié dans le fichier de description. Implanté par HttpServlet 61 CC by-nc-sa

Le Servlet Context Maintien des données pour toute l application Fournit le request dispatcher Données d initialisations pour toute l application Log Un ServletContext par application et par JVM 62 CC by-nc-sa

Le ServletContext Objet permettant au servlet de communiquer avec le servlet container Obtenu avec Servlet.getServletContext() Les principales méthodes de ServletContext Object getattribute(string name) Retourne un attribut du contexte void setattribute(string name, Object value) Ajoute ou remplace un objet dans le contexte String getinitparameter(string name) Retourne un paramètre d'initialisation de l'application void log(string msg) Ajoute un message dans le log file du servlet container 63 CC by-nc-sa

Le Servlet Context 64 CC by-nc-sa

Les attributs du context Valeurs disponibles pour toute l application 65 CC by-nc-sa

Le contexte Il est possible d'avoir des paramètres d'initialisation du contexte <context-param> <param-name>database</param-name> <param-value>testdb</param-value> <description>le nom de la base</description> </context-param> Ces paramètres peuvent être utilisés dans le servlet avec la méthode Javax.servlet.ServletContext getinitparameter() et Javax.servlet.ServletContext.getInitParameterNames() 66 CC by-nc-sa

La visibilité (from jguru) 67 CC by-nc-sa

Les Sessions Comment maintenir l état d un client au cours d une série de requêtes d un même utilisateur pendant un temps donné? HTTP est stateless Comment identifier le client? Où mettre les données de la session? 68 CC by-nc-sa

Servlet et sessions La gestion des sessions utilise les techniques classiques url rewriting Cookies Champs cachés dans les formulaires L'API HttpServlet fournit des fonctions pour gérer les sessions L'implantation est casi-transparente pour l'utilisateur 69 CC by-nc-sa

Session & HttpServletRequest C'est le paramètre request qui maintient les informations sur la session Les méthodes sont HttpSession request.getsession(boolean flag) Flag=true : retourne l'objet session courant ou en crée un s'il n'y en a pas. Flag=false : Retourne l'objet session courant ou null s'il n'y en a pas isrequestedsessionidvalid() Vrai si l'id de la session est valide dans le contexte courant isrequestedsessionidfromcookie() Vrai si l'id de la session vient d'un cookie isrequestedsessionidfromurl() Vrai si l'id de la session vient d'un URL 70 CC by-nc-sa

Création de la session 71 CC by-nc-sa

Requête dans la même session 72 CC by-nc-sa

L'objet HttpSession L'objet HttpSession permet de conserver des valeurs entre des appels d'un client Les principales méthodes sont Object getattribute(string name) Récupère la valeur de l'attribut par son nom Enumeration getattributenames() Retourne la liste de tous les attributs void setattribute(string name, Object value) Ajoute un attribut à la session String getid() Retourne l'identifiant de la session void invalidate() Invalide la session long getcreationtime() long getlastaccessedtime() long getmaxinactiveinterval() ServletContext getservletcontext() 73 CC by-nc-sa

Cookies Création de cookies 74 CC by-nc-sa

Cookies 75 CC by-nc-sa

Getting cookies values 76 CC by-nc-sa

Fin de vie d une session Au niveau programmatique Fermeture automatique en fixant la durée de vie (en minutes) <session-config> <session-timeout>30</session-timeout> </session-config> 77 CC by-nc-sa

Ecrire une application Web RequestDispatcher 78 CC by-nc-sa

Le RequestDispatcher L'objet RequestDispatcher est utilisé pour Transférer la requête à un autre programme Inclure la réponse d'un autre programme Pour obtenir le request dispatcher 79 CC by-nc-sa

L'utilisation du RequestDispatcher La requête peut être transférée rd.forward(request,response) L'utilisation classique consiste à avoir un servlet contrôleur qui transmet les commandes à des servlets spécialisés Pas d écriture sur la réponse avant le forward (exception) Le contrôle revient au servlet Ecritures sur la réponse ignorés après le forward La réponse peut être incluse dans la réponse en cours de construction rd.include(request,response) Ici, on peut implanter un équivalent de server side include. 80 CC by-nc-sa

Exemple d utilisation Démonstration! 81 CC by-nc-sa

82 CC by-nc-sa

Ecrire une application Web Listeners 83 CC by-nc-sa

Les listeners Les listeners sont des objets dont les méthodes sont invoquées en fonction du cycle de vie d'un servlet A la création et à la destruction d'un contexte (une appli) javax.servlet.servletcontextlistener Quand on modifie les attributs du contexte javax.servlet.servletcontextattributelistener A la création, la suppression, le timeout d'une session javax.servlet.httpsessionlistener A la création, modification, suppression d'un attribut de session javax.servlet.httpsessionattributelistener 84 CC by-nc-sa

Pourquoi des listeners? Pour une application Web Pas de point d entrée (main) Pas d exit() Comment faire pour initialiser l application? Pour une session Possibilité de démarrer à plusieurs adresses (bookmarks, recherche) Comment initialiser la session? Pas de fin de session explicite. Comment terminer la session? 85 CC by-nc-sa

Les listeners du contexte ServletContextListener void contextdestroyed(servletcontextevent sce) Notification that the servlet context is about to be shut down. void contextinitialized(servletcontextevent sce) Notification that the web application is ready to process requests. ServletContextAttributeListener void attributeadded(servletcontextattributeevent scab) Notification that a new attribute was added to the servlet context. void attributeremoved(servletcontextattributeevent scab) Notification that an existing attribute has been remved from the servlet context. void attributereplaced(servletcontextattributeevent scab) Notification that an attribute on the servlet context has been replaced. 86 CC by-nc-sa

Les listeners de session HttpSessionListener Notification that a session was created. Notification that a session was invalidated. HttpSessionAttributeListener Notification that an attribute has been added to a session. Notification that an attribute has been removed from a session. Notification that an attribute has been replaced in a session. 87 CC by-nc-sa

La déclaration d un listener web.xml <listener> <listener-class> cours.exemple1.sessioncounter </listener-class> </listener> Il n est pas nécessaire de préciser le type du Listener (pourquoi?) Annotation @WebListener 88 CC by-nc-sa

Exemple 89 CC by-nc-sa

Un autre exemple 90 CC by-nc-sa

Exemple (Servlet 3.0) avec déclarations 91 CC by-nc-sa

Ecrire une application Web Filtres 92 CC by-nc-sa

Les filtres Un filtre est un morceau de code exécuté entre la requête et le «endpoint» Permettent de faire du pre et post-processing sur une requête Lire la requête, modifier la requête modifier la réponse, retourner des erreurs au client Même cycle de vie qu un servlet init / dofilter / destroy 93 CC by-nc-sa

Intérêt des filtres Permettent d étendre l application sans changer les servlets Services transversaux en entrée et en sortie En entrée Log des appels Sécurité Contrôle des paramètres En sortie Post processing du flux (XSLT) Compression (gzip) Fonctionnent comme un pipe & filter 94 CC by-nc-sa

Coder un filtre () dofilter Implanter la méthode Déclarer le filtre web.xml : <Filter> <Filter-mapping> Servlet 3 : @WebFilter("cible") Même fonctionnement que pour un servlet Le transfert à la suite de la chaine se fait par la fonction () chain.dofilter Transfert à un autre filtre ou à un servlet ou une page HTML ou une page JSP La suite s exécute au retour de dofilter 95 CC by-nc-sa

Exemple (généré par NetBeans) 96 CC by-nc-sa

PreProcessing Affichage des paramètres 97 CC by-nc-sa

PotsProcessing Ajout de texte dans la sortie 98 CC by-nc-sa

Le servlet filtré 99 CC by-nc-sa

L exécution Sur le serveur 100 CC by-nc-sa

Wrapping Principe : encapsuler l objet requête ou l objet réponse pour modifier son comportement Encapsulation de request : surcharge HttpServletRequestWrapper Encapsulation de reponse : surcharge de HttpServletRequestResponse Ensuite il suffit de remplacer l objet wrappé. Le Wrapping peut aussi être utilisé dans des Servlets normaux. 101 CC by-nc-sa

Le Wrapping des réponses Plus compliqué que pour les requêtes Nécessite de récupérer la réponse d abord Ou d écrire un Writer spécialisé Utilisations classiques Caching des réponses Compression des réponses 102 CC by-nc-sa

Ecrire une application Web Erreurs 103 CC by-nc-sa

La gestion des erreurs Il est possible de définir les pages à afficher En fonction d'erreurs http En fonction d'exceptions java Dans web.xml <error-page> <exception-type> cours.event.eventexception </exception-type> <location>/erreur.html</location> </error-page> Pour une exception java <error-page> <error-code>404</error-code> <location>/404.html</location> </error-page> 104 CC by-nc-sa Pour une erreur Http

Codes HTTP 100 : Continue : Attente de la suite de la requête 200 : OK : Requête traitée avec succès 201 : Created : Requête traitée avec succès avec création d'un document 204 : No Content : Requête traitée avec succès mais pas d'information à renvoyer 303 : See Other : La réponse à cette requête est ailleurs 400 : Bad Request : La syntaxe de la requête est erronée 401 : Unauthorized : Une authentification est nécessaire 403 : Forbidden : L'authentification est refusée 404 : Not Found : Document non trouvé 414 : Request-URI Too Long : URI trop longue 500 : Internal Server Error : Erreur interne du serveur 105 CC by-nc-sa

Ecrire une application Web Sécurité 106 CC by-nc-sa

Servlet et sécurité (from servlet spec) A web application contains resources that can be accessed by many users. These resources often traverse unprotected, open networks such as the Internet. In such an environment, a substantial number of web applications will have security requirements. Authentication Access Control Data Integrity 107 CC by-nc-sa

Sécurité The Servlet Container support declarative security and programmatic security. Declarative : Security policies are declared in deployement descriptor (web.xml) or as annotation Programmatic security allow servlet developers to directly interact with security API of the container. Use it carefully (only if declarative security is not sufficient) 108 CC by-nc-sa

Declarative security <security-constraint> <web-resource-collection> <web-resource-name>salesinfo </web-resource-name> <url-pattern>/salesinfo/*</url-pattern> <http-method>get</http-method> <http-method>post</http-method> </web-resource-collection> <auth-constraint> <role-name>manager</role-name> </auth-constraint> <user-data-constraint> <transport-guarantee>confidential </transportguarantee> </user-data-constraint> </security-constraint> 109 CC by-nc-sa

Security constraints 110 CC by-nc-sa

Modèle de sécurité Basé sur des rôles Groupes d utilisateurs Accès aux servlet/méthodes Ne fournit pas de gestion fine des droits d accès aux donnés Au déploiement, les rôles sont mappé sur des groupes sun-applicaton.xml (glassfish) <security-role-mapping> <role-name>pouet</role-name> <group-name>utilisateur</group-name> </security-role-mapping> 111 CC by-nc-sa

Security model Les users ayant endossé le rôle «pouet» ont le droit de requéter /World Peut être changé par le «deployer» 112 CC by-nc-sa

Le rôle «pouet» est associé au groupe «pouet» déclaré sur glassfish, pour l'application web MyHello 113 CC by-nc-sa

Gestion des utilisateurs (Tomcat) Propre au container web Tomcat : De manière statique dans le $TOMCAT_HOME/conf/tomcatusers.xml <tomcat-users> <role rolename="chat"/> <role rolename="souris"/> <user username="tom" password="miaou" roles="chat"/> <user name="admin" password="pw" roles="chat,souris" /> </tomcat-users> 114 CC by-nc-sa

Gestion des utilisateurs Définis dans un domaine FileRealm JDBCRealm CustomRealm LDAPRealm,... 115 CC by-nc-sa

Déclarer les users dans le «runtime» 116 CC by-nc-sa

Authentication A web client can authenticate a user to a web server using one of the following mechanisms: HTTP(S) Basic Authentication HTTP Digest Authentication HTTP(S) Client Authentication Form Based Authentication Programmatic Authentication 117 CC by-nc-sa

Authentication : Basic Couple username / password Définie par la spécification HTTP/1.0 Pas sécurisé passwords envoyé en encoding base64 le serveur cible n est pas authentifié Requière HTTPS ou IPSEC/VPN pour assurer plus de sécurité 118 CC by-nc-sa

Security model Contrainte de sécurité 119 CC by-nc-sa Authentication «BASIC» Déclaration de rôle

Accès sécurisé à la servlet «World» 120 CC by-nc-sa

Authentication : Digest <login-config> <auth-method>digest</auth-method> <realm-name>digest Authentication Example</realm-name> </login-config> Similaire à l authentication basic Couple username / password Gestion des utilisateurs par le container web Password non transmis Le navigateur envoi un digest : hash cryptographié du username/ password/uri/nonce (usage unique) Danger : stockage des passwords en clair pour calculer le digest Peu implanté 121 CC by-nc-sa

Authentication «form login» web.xml <login-config> <auth-method>form</auth-method> <form-login-config> <form-login-page>/pagedelogin.jsp</form-login-page> <form-error-page>/pagederreur.jsp</form-error-page> </form-login-config> </login-config> pagedelogin.jsp <form action="j_security_check" method="post"> <input type="text" name="j_username"/> <input type="password" name="j_password"/> <input type="submit" value="connexion"/> </form> 122 CC by-nc-sa

David Geary Nov 30, 2001 123 CC by-nc-sa

Authentication «form login» Même problèmes que l authentication BASIC password transmis en clair Stockage des password côté serveur Gestion des utilisateurs par le container Requière aussi HTTPS ou IPSEC/VPN pour assurer plus de sécurité 124 CC by-nc-sa

Authentication «programmatique» Methodes de l interface HttpServletRequest (J EE 6) : authenticate() Demande au container d effectuer l authentification login() avec login/password logout() getremoteuser() Nom de l utilisateur (null si personne) isuserinrole() getuserprincipal() Retourne le java.security.principal correspondant à l utilisateur 125 CC by-nc-sa

Sécurité et annotation (servlet 3) Annotation sur une servlet OU une do-méthode (doget, doput, dohead, ) Déclaration des rôles @DeclareRoles ("role1") Rôles autorisés @RolesAllowed("role1"), @RolesAllowed({"role1", "role2"}) Mode de transport (HTTPS ou HTTP) @TransportProtected Autorisation globale @PermitAll, @DenyAll 126 CC by-nc-sa

Sécurité et annotation : exemple @WebServlet("/myurl") @RolesAllowed("javaee") @TransportProtected public class TestServlet extends HttpServlet {... @RolesAllowed("staff") protected void dopost(httpservletrequest req, HttpServletResponse res) throws IOException, ServletException {... } @TransportProtected(false) @PermitAll protected void dotrace(httpservletrequest req, HttpServletResponse res) throws IOException, ServletException {... } } 127 CC by-nc-sa

Accès sécurisé à une méthode (Servlet 3) @WebServlet("/myurl") @RolesAllowed("javaee") @TransportProtected public class TestServlet extends HttpServlet {... @RolesAllowed("staff") protected void dopost(httpservletrequest req, HttpServletResponse res) throws IOException, ServletException {... } @TransportProtected(false)@PermitAll protected void dotrace(httpservletrequest req, HttpServletResponse res) throws IOException, ServletException {... } } 128 CC by-nc-sa

Conclusion Servlet 129 CC by-nc-sa

Conclusion The servlet model is a component model Servlet developpers have to conform to the model (implements HttpServlet class) The Servlet container offers: Web application lifecycle management Distributed container Security management Servlet composition (by dispatching) Interception (through filters) Session management facilities 130 CC by-nc-sa

What we have not seen Distributed Servlet container over a cluster of computers Asynchronous servlet (Servlet 3.0) Web Fragment : Make Web application by composition web application fragment... 131 CC by-nc-sa

Servlet limitations Request/Response model can decrease maintainability... The business logic of application are in servlets HTML code or XHTML code is embedded in servlet... Need an higher abstraction level to leverage maintainability problems To speed up coding stage (RAD, rapid application development)... 132 CC by-nc-sa