Come tutti sapete, Spring Boot è un modo meraviglioso di sviluppare una WebApp o una StandaloneApp con una configurazione minima e un'installazione mirata.
È così che ho realizzato uno sviluppo di filtri Web nell'applicazione Spring Boot
Le mie specifiche SpringBootApp: -
Versione Spring Boot: 2.0.4.RELEASE
Versione Java: 8.0
Specifica servlet : Servlet 3.0 (obbligatoria e importante)
Ho dichiarato il mio filtro Web nel modo seguente, aderendo alle specifiche servlet 3.0
Questo è il modo programmatico di definire un filtro in sostituzione di definizioni basate su web.xml.
L'annotazione "@Webfilter" verrà elaborata dal contenitore durante la distribuzione, la classe Filter in cui viene trovata verrà creata secondo la configurazione e applicata ai pattern URL, javax.servlet.Servlets e javax.servlet.DispatcherTypes.
Per evitare completamente Web.xml e ottenere WebApp "Distribuibile": -
Per distribuire l'applicazione Spring Boot come "WAR tradizionale", la classe dell'applicazione dovrebbe estendere SpringBootServletInitializer.
NOTA::
SpringBootServletInitializer è una "Implementazione programmatica" di web.xml con riferimento alle specifiche Servlet 3.0+, che richiede un'implementazione di WebApplicationInitializer.
Pertanto, SpringBootApplication non richiede "web.xml" mentre la sua classe Application (dopo l'estensione di SpringBootServletInitializer) esegue la scansione di
- @WebFilter,
- @WebListener e
- @WebServlet.
Annotation @ServletComponentScan
Questa annotazione abilita la scansione dei pacchetti di base per i componenti Web annotati con @WebFilter, @WebListener e @WebServlet.
A causa del fatto che i contenitori incorporati non supportano le annotazioni @WebServlet, @WebFilter e @WebListener, Spring Boot, facendo molto affidamento sui contenitori incorporati, ha introdotto questa nuova annotazione @ServletComponentScan per supportare alcuni vasi dipendenti che utilizzano queste 3 annotazioni.
La scansione viene eseguita solo quando si utilizza un contenitore servlet incorporato.
Di seguito è la mia definizione di classe di applicazione Spring Boot: -
Inizializzatore servlet personalizzato: -
Qui: ho definito una classe personalizzata: "ServletInitializer" che estende la classe: SpringBootServletInitializer.
Come spiegato in precedenza, SpringBootServletInitializer è responsabile della scansione delle annotazioni: -
- @WebFilter,
- @WebListener e
- @WebServlet.
E quindi la classe di applicazione Spring Boot dovrebbe
- Estendere la classe: SpringBootServletInitializer OR
- estende la classe personalizzata che estende la classe: SpringBootServletInitializer