Les filtres dans les servlets et JSP sont des classes Java et leur objectif d'existence est le suivant :
Intercepter lors de la demande d'accès à une ressource backend
Gérer les réponses renvoyées du serveur au client
Plusieurs types de filtres courants sont répertoriés ci-dessous :
Filtre d'authentification
Filtre de compression des données
filtre de chiffrement
Filtres qui déclenchent des événements d'accès aux ressources
Filtre de conversion d'images
Filtres de connexion et d'authentification
Filtre à chaîne de type MIME
Filtre de jetons
Filtres XSL/T pour transformer le contenu XML
Le filtre sera inséré dans le fichier web.xml et mappé au nom du servlet, du fichier JSP ou du modèle d'URL. Le fichier de description de déploiement web.xml se trouve dans le répertoire <Tomcat-installation-directory>conf.
Lorsque le conteneur JSP démarre une application Web, il crée une instance de chaque filtre. Ces filtres doivent être déclarés dans le fichier descripteur de déploiement web.xml et exécutés dans l'ordre dans lequel ils sont déclarés.
Un filtre est une classe Java qui implémente l'interface javax.servlet.Filter. L'interface javax.servlet.Filter définit trois méthodes :
| numéro de série | Méthode et description |
|---|---|
| 1 | public void doFilter (ServletRequest, ServletResponse, FilterChain) Le conteneur appellera cette méthode chaque fois qu'une requête/réponse passe par la chaîne de filtrage, car le client demande des ressources à la fin de la chaîne. |
| 2 | public void init(FilterConfig filterConfig) Le conteneur appelle cette méthode pour indiquer qu'un filtre est placé dans le service |
| 3 | public void destroy() Cette méthode est appelée par le conteneur pour indiquer qu'un filtre est supprimé du service |
Cet exemple imprimera l'adresse IP ainsi que la date et l'heure de chaque accès au fichier JSP. Bien sûr, il ne s'agit que d'un exemple simple pour vous donner une idée de l'utilisation simple d'un filtre, mais vous pouvez utiliser ces concepts pour construire vous-même des programmes plus complexes.
//Présentez le package Java import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.util.*; //Implémentez la classe Filter public class LogFilter Implements Filter { public void init( FilterConfig config) lance ServletException{ // Récupère les paramètres d'initialisation String testParam = config.getInitParameter("test-param"); //Imprimer les paramètres d'initialisation System.out.println("Test Param: " + testParam); } public void doFilter (demande ServletRequest, réponse ServletResponse, chaîne FilterChain) renvoie java.io.IOException, ServletException { // Récupère l'adresse IP du client String ipAddress = request.getRemoteAddr(); // Adresse IP de sortie et heure actuelle System.out.println("IP "+ ipAddress + ", Time " + new Date().toString()); // Passer la chaîne de filtre de requête chain.doFilter(request,response); } public void destroy( ){ /* Après la destruction de l'instance de filtre sur le serveur Appelé avant la suppression. */ }}Compilez le fichier LogFilter.java, puis placez le fichier de classe compilé dans le répertoire <répertoire d'installation Tomcat>/webapps/ROOT/WEB-INF/classes.
Les filtres sont définis puis mappés sur une URL ou un nom de fichier JSP, un peu comme la façon dont les servlets sont définis et mappés. Dans le fichier de description de déploiement web.xml, utilisez la balise <filter> pour le mappage de filtre :
<filter> <filter-name>LogFilter</filter-name> <filter-class>LogFilter</filter-class> <init-param> <param-name>test-param</param-name> <param-value >Paramètre d'initialisation</param-value> </init-param></filter><filter-mapping> <filter-name>LogFilter</filter-name> <url-pattern>/*</url-pattern></filter-mapping>
Le filtre ci-dessus sera appliqué à tous les servlets et programmes JSP car nous avons spécifié "/*" dans la configuration. Vous pouvez également spécifier un chemin de servlet ou JSP si vous souhaitez appliquer le filtre uniquement à quelques servlets ou programmes JSP.
Maintenant, accédez au servlet ou à la page JSP comme d'habitude, et vous trouverez un enregistrement de cet accès dans le journal du serveur. Vous pouvez également utiliser l'enregistreur Log4J pour vous connecter à d'autres fichiers.
Votre application Web peut définir de nombreux filtres différents. Maintenant que vous avez défini deux filtres, AuthenFilter et LogFilter, les autres étapes sont les mêmes qu'avant, sauf que vous créez un mappage différent, comme celui-ci :
<filter> <filter-name>LogFilter</filter-name> <filter-class>LogFilter</filter-class> <init-param> <param-name>test-param</param-name> <param-value >Paramètre d'initialisation</param-value> </init-param></filter> <filter> <filter-name>AuthenFilter</filter-name> <filter-class>AuthenFilter</filter-class> <init-param> <param-name>test-param</param-name> <param-value>Paramètre d'initialisation</param-value> </init-param> </filter> <filter-mapping> <filter-name>LogFilter</filter-name> <url-pattern>/*</url-pattern></filter-mapping> <filter-mapping> <filter-name>AuthenFilter</filter-name> <url-pattern>/*</url-pattern></filter-mapping>
L'ordre de mappage des éléments <filter> dans web.xml détermine l'ordre dans lequel le conteneur applique ces filtres. Pour inverser l'ordre d'application, vous inversez simplement l'ordre dans lequel les éléments <filter> sont définis dans web.xml.
Par exemple, l’exemple ci-dessus appliquerait d’abord LogFilter, puis AuthenFilter, mais l’exemple suivant inverserait l’ordre d’application :
<filter-mapping> <filter-name>AuthenFilter</filter-name> <url-pattern>/*</url-pattern></filter-mapping> <filter-mapping> <filter-name>LogFilter</filter -name> <url-pattern>/*</url-pattern></filter-mapping>