Servlet Filter: come, quando, perchè

In questo articolo scopriamo cosa sono i Filter, come si utilizzano nelle nostre web application e le applicazioni che potrebbero trarne giovamento

Introduzione

A partire dalla specifica 2.3 delle Servlet API, abbiamo a disposizione un nuovo e interessante componente da utilizzare nelle nostre applicazioni, il Filter (filtro). Come suggerisce la parola, questa componente può essere utilizzata all’interno delle nostre web application per filtrare, in input o in output, le informazioni che transitano. Chiaramente questo può essere utile in diversi casi, come quello che vedremo in questo articolo.

Specifica

Le Servlet API definiscono una nuova interfaccia, Filter, che viene riportata di seguito

Questa interfaccia ci permette di inserire all’interno della nostra applicazione web dei filtri, per realizzare le più svariate applicazioni. Come viene riportato nella documentazione ufficiale dell’interfaccia Filter, applicazioni classiche che posson essere sviluppate, utilizzando i filtri, sono:

  • Filtri di autenticazione
  • Filtri per il logging e l’auditing
  • Filtri per la compressione delle immagini
  • Filtri per la compressione dei dati
  • Filtri per la criptazione
  • Filtri per la tokenizzazione
  • Filtri che segnalano gli eventi di accesso alle risorse
  • Filtri per trasformazione XSL/T

Nella seguente immagine trovate il classico funzionamento che è dietro ad un Filter:

Servlet Filter

 

Praticamente i filtri fanno da “man in the middle” nella nostra applicazione web e riescono a collezionare e/o manipolare i dati in uscita e in entrata. Un’altra classica applicazione che si potrebbe realizzare, ad esempio, riguarda la cache (per ottimizzare le richieste che vengono fatte al nostro server). Ma vediamo prima di tutto un semplice esempio di Filter

Hello World

Per capire subito di cosa uno sta parlando, conviene sempre buttarsi sul lato pratico della situazione. Vediamo quindi cosa è un Filter e come possiamo definirlo nella nostra web application. Come abbiamo visto dall’interfaccia e dall’immagine riportata, il Filter viene richiamato ogni volta che vengono gestite request/response sulle risorse per il quale è stato assegnato. Questa assegnazione avviene tramite il file web.xml. Praticamente qui definiamo prima di tutto il filtro e poi scegliamo su cosa mapparlo. Qui di seguito vedete riportato il web.xml per la nostra applicazione d’esempio.

Con il tag abbiamo definito il filtro e con abbiamo deciso di filtrare tutto. Se avessimo voluto filtrare solo le immagini jpg, per trasformarle in bianco e nero avremmo dovuto quindi inserire il tag seguente

Vediamo ora come è stato implementato il nostro semplice MyFilter, primo filtro d’esempio

Abbiamo dovuto implementare semplicemente l’interfaccia Filter e quindi i 3 metodi riportati precedentemente. Testando una semplice applicazione web con questo filtro questo sarà il probabile risultato che avremo dalla console di Tomcat

Eseguendo la nostra applicazione possiamo vedere che appena viene lanciata, abbiamo l’informazione relativa al fatto che il filtro è stato inizializzato. Successivamente, come possiamo vedere dai log, vengono richiamate due pagine della nostra web application e infine Tomcat viene spento, distruggendo anche il filtro.

Informazioni sulle visite

Una semplice estensione al classico Hello World è il seguente esempio, nel quale stampiamo nella console di Tomcat alcune informazioni della richiesta che è stata fatta.
Queste informazioni potrebbe essere loggate su filesystem o su db per creare successivamente un report degli accessi (tipo Shinystat e simili)

Altri possibili utilizzi

Grazie ai filtri, ci si può sbizzarrire nel creare simpatiche e interessanti funzionalità per le nostre applicazioni. Ad esempio fino ad adesso abbiamo parlato di gestire la request che viene fatta, ma non abbiamo ancora toccato la response che viene restituita. Una cosa interessante da realizzare potrebbe essere la modifica del contenuto. Grazie alla response, ad esempio, possiamo identificare lo user agent dell’utente che ha effettuato la richiesta. Immaginiamo che l’utente stia navigando da un browser WAP 2.0/xHTML. In questo caso possiamo effettuare una trasformazione delle nostre pagine da HTML in xHTML. Questo sarebbe possibile utilizzando tool come JTidy, che ci permettono la semplice trasformazione da riga di comando. Insomma le applicazioni che possono derivare da questa interfaccia Filter sono molte ed interessanti.

Risorse

http://java.sun.com/products/servlet/Filters.html
http://www.onjava.com/pub/a/onjava/2004/03/03/filters.html
http://www.onjava.com/pub/a/onjava/2003/11/19/filters.html
http://www.developer.com/java/ent/article.php/3467801

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *