Como todos saben, Spring Boot es una forma maravillosa de desarrollar una aplicación web o una aplicación independiente con una configuración mínima y una configuración obstinada.
Así es como he logrado un desarrollo de filtro web en la aplicación Spring Boot
Mis especificaciones SpringBootApp: -
Versión de Spring Boot: 2.0.4.RELEASE
Versión de Java: 8.0
Especificación del servlet: Servlet 3.0 (obligatorio e importante)
Declaré mi filtro web de la siguiente manera, cumpliendo con las especificaciones de Servlet 3.0
Esta es la forma programática de definir un filtro como reemplazo de las definiciones basadas en web.xml.
La anotación "@Webfilter" será procesada por el contenedor durante la implementación, la clase Filter en la que se encuentra se creará según la configuración y se aplicará a los patrones de URL, javax.servlet.Servlets y javax.servlet.DispatcherTypes.
Para evitar completamente Web.xml y lograr una aplicación web "desplegable": -
Para implementar Spring Boot Application como "WAR tradicional", la clase de aplicación debe extender SpringBootServletInitializer.
NOTA ::
SpringBootServletInitializer es una "Implementación programática" de web.xml con referencia a las especificaciones de Servlet 3.0+, que requiere una implementación de WebApplicationInitializer.
Por lo tanto, SpringBootApplication no requiere "web.xml" como su clase de aplicación (después de extender SpringBootServletInitializer) escanea para
- @WebFilter,
- @WebListener y
- @WebServlet.
Anotación @ServletComponentScan
Esta anotación permite escanear paquetes base para los componentes web anotados con @WebFilter, @WebListener y @WebServlet.
Debido al hecho de que los contenedores integrados no son compatibles con las anotaciones @WebServlet, @WebFilter y @WebListener, Spring Boot, confiando en gran medida en los contenedores integrados, introdujo esta nueva anotación @ServletComponentScan para admitir algunos frascos dependientes que usan estas 3 anotaciones.
El escaneo solo se realiza cuando se utiliza un contenedor de Servlet incorporado.
La siguiente es mi definición de clase de aplicación Spring Boot: -
Inicializador de servlet personalizado: -
Aquí: he definido una clase personalizada: "ServletInitializer" que amplía la clase: SpringBootServletInitializer.
Como se explicó anteriormente, SpringBootServletInitializer es responsable de escanear anotaciones: -
- @WebFilter,
- @WebListener y
- @WebServlet.
Y, por lo tanto, la clase de aplicación Spring Boot debería
- Extienda la clase: SpringBootServletInitializer O
- extend Clase personalizada que extiende la clase: SpringBootServletInitializer