Un filtre est un composant d'une application web qui agit comme un intercepteur sur une servlet.
Il est déclaré dans le descripteur de l'application web.xml
, et posé sur une ou
plusieurs servlets. Lorsqu'une requête doit être traitée par une servlet sur laquelle un filtre est
déclaré, alors le serveur, plutôt que d'invoquer directement la méthode doGet()
ou
doPost()
de la servlet, va invoquer la méthode doFilter()
de ce filtre.
Cette méthode reçoit trois paramètres :
les deux premiers sont les objets requête et réponse qui auraient été envoyés à la servlet ;
le troisième est un objet de type FilterChain
, qui modèlise la servlet interceptée.
En fait, comme plusieurs filtres peuvent être déclarés en cascade, il se peut que cet objet
modèlise le filtre à invoquer après celui-ci.
Le filtre peut donc agir sur la requête, qui est complète. S'il choisit d'autoriser le traitement
de cette requête par la servlet, alors il doit invoquer la méthode doFilter()
de
l'objet FilterChain
, en lui passant la requête et la réponse qu'il a reçues en paramètre.
Il peut aussi choisir de ne pas traiter cette requête de façon nominale, et de la rediriger vers une autre ressource de l'application web. Cette décision peut être prise si la ressource est temporairement indisponible, ou si le filtre détecte un problème de sécurité.
Lorsque la méthode doFilter()
rend la main, il peut enfin décider de modifier la réponse
construite par la servlet interceptée, s'il a pris la précaution de ne pas lui passer directement
l'objet réponse qui lui a été donné.
Un filtre peut donc agir sur tous les aspects du cycle requête / réponse, en modifiant l'un ou l'autre, à sa guise.