Comme vous le savez tous, Spring Boot est une merveilleuse façon de développer une WebApp ou StandaloneApp avec une configuration minimale et une configuration réfléchie.
Voici comment j'ai réalisé un développement de filtre Web dans une application Spring Boot
Mes spécifications SpringBootApp: -
Version Spring Boot: 2.0.4.RELEASE
Version Java: 8.0
Spécification du servlet : Servlet 3.0 (obligatoire et important)
J'ai déclaré mon filtre Web de la manière suivante, en respectant les spécifications de la servlet 3.0
Il s'agit de la manière programmatique de définir un filtre en remplacement des définitions basées sur web.xml.
L'annotation "@Webfilter" sera traitée par le conteneur pendant le déploiement, la classe Filter dans laquelle elle se trouve sera créée selon la configuration et appliquée aux modèles d'URL, javax.servlet.Servlets et javax.servlet.DispatcherTypes.
Pour éviter complètement Web.xml et obtenir une WebApp "déployable": -
Pour déployer Spring Boot Application en tant que «WAR traditionnel», la classe d'application doit étendre SpringBootServletInitializer.
REMARQUE ::
SpringBootServletInitializer est une "implémentation programmatique" de web.xml en référence aux spécifications Servlet 3.0+, qui nécessitent une implémentation de WebApplicationInitializer.
Ainsi, SpringBootApplication ne nécessite pas "web.xml" car sa classe Application (après extension de SpringBootServletInitializer) recherche
- @WebFilter,
- @WebListener et
- @WebServlet.
Annotation @ServletComponentScan
Cette annotation permet d'analyser les packages de base pour les composants Web annotés avec @WebFilter, @WebListener et @WebServlet.
Étant donné que les conteneurs incorporés ne prennent pas en charge les annotations @WebServlet, @WebFilter et @WebListener, Spring Boot, s'appuyant fortement sur les conteneurs incorporés, a introduit cette nouvelle annotation @ServletComponentScan pour prendre en charge certains pots dépendants qui utilisent ces 3 annotations.
L'analyse n'est effectuée que lors de l'utilisation d'un conteneur de servlet intégré.
Voici ma définition de classe d'application Spring Boot: -
Initialiseur de servlet personnalisé: -
Ici: J'ai défini une classe personnalisée: "ServletInitializer" qui étend la classe: SpringBootServletInitializer.
Comme expliqué précédemment, SpringBootServletInitializer est responsable de l'analyse des annotations: -
- @WebFilter,
- @WebListener et
- @WebServlet.
Et donc la classe d'application Spring Boot devrait
- Soit étendre la classe: SpringBootServletInitializer OU
- étendre la classe personnalisée qui étend la classe: SpringBootServletInitializer