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.