Wie Sie alle wissen, ist Spring Boot eine wunderbare Möglichkeit, eine WebApp oder StandaloneApp mit minimaler Konfiguration und eigenwilligem Setup zu entwickeln.
Auf diese Weise habe ich eine Webfilterentwicklung in Spring Boot-Anwendung erreicht
Meine SpringBootApp-Spezifikationen: -
Spring Boot-Version: 2.0.4.RELEASE
Java-Version: 8.0
Servlet-Spezifikation: Servlet 3.0 (obligatorisch und wichtig)
Ich habe meinen Webfilter wie folgt deklariert und dabei die Servlet-Spezifikationen 3.0 eingehalten
Dies ist die programmatische Methode zum Definieren eines Filters als Ersatz für web.xml-basierte Definitionen.
Die Annotation "@Webfilter" wird vom Container während der Bereitstellung verarbeitet. Die Filterklasse, in der sie gefunden wird, wird gemäß der Konfiguration erstellt und auf die URL-Muster javax.servlet.Servlets und javax.servlet.DispatcherTypes angewendet.
Um Web.xml vollständig zu vermeiden und "Deployable" WebApp zu erreichen: -
Um die Spring Boot-Anwendung als "traditionelles WAR" bereitzustellen, sollte die Anwendungsklasse SpringBootServletInitializer erweitern.
HINWEIS :: SpringBootServletInitializer ist eine "programmatische Implementierung" von web.xml unter Bezugnahme auf Servlet 3.0+ -Spezifikationen, für die eine Implementierung von WebApplicationInitializer erforderlich ist.
Daher benötigt SpringBootApplication nicht "web.xml", da die Anwendungsklasse (nach Erweiterung von SpringBootServletInitializer) nach
- @WebFilter,
- @WebListener und
- @WebServlet sucht.
Anmerkung @ServletComponentScan
Diese Annotation ermöglicht das Scannen von Basispaketen für die mit @WebFilter, @WebListener und @WebServlet annotierten Webkomponenten.
Aufgrund der Tatsache, dass eingebettete Container die Annotationen @WebServlet, @WebFilter und @WebListener nicht unterstützen, hat Spring Boot, das sich stark auf eingebettete Container stützt, diese neue Annotation @ServletComponentScan eingeführt, um einige abhängige Jars zu unterstützen, die diese 3 Annotationen verwenden.
Das Scannen wird nur durchgeführt, wenn ein eingebetteter Servlet-Container verwendet wird.
Es folgt meine Definition der Spring Boot-Anwendungsklasse: -
Benutzerdefinierter Servlet-Initialisierer: -
Hier: Ich habe eine benutzerdefinierte Klasse definiert: "ServletInitializer", die die Klasse: SpringBootServletInitializer erweitert.
Wie bereits erläutert, ist SpringBootServletInitializer für das Scannen von Anmerkungen verantwortlich: -
- @WebFilter,
- @WebListener und
- @WebServlet.
Und daher sollte die Spring Boot-Anwendungsklasse
- Erweitern Sie entweder die Klasse: SpringBootServletInitializer ODER
- Erweitern Benutzerdefinierte Klasse, die die Klasse erweitert: SpringBootServletInitializer