Як ви всі знаєте, Spring Boot - це чудовий спосіб розробки WebApp або StandaloneApp з мінімальною конфігурацією та висловлюваною настройкою.
Ось так я домігся розробки веб-фільтра у додатку Spring Boot
Мої характеристики SpringBootApp: -
Версія весняного завантаження: 2.0.4.РЕЛІЗА
Версія Java: 8.0
Специфікація сервлета: Сервлет 3.0 (обов'язковий та важливий)
Я оголосив свій веб-фільтр наступним чином, дотримуючись сервісних специфікацій 3.0
Це програмний спосіб визначення фільтра як заміни визначень на основі web.xml.
Анотація "@Webfilter" буде оброблена контейнером під час розгортання, клас фільтру, в якому він знайдеться, буде створений відповідно до конфігурації та застосований до шаблонів URL-адрес, javax.servlet.Servlets та javax.servlet.DispatcherTypes.
Щоб повністю уникнути Web.xml та досягти "розгортаного" WebApp: -
Щоб розгорнути програму Spring Boot як "традиційну війну", клас додатків повинен поширити SpringBootServletInitializer.
ПРИМІТКА:
SpringBootServletInitializer - це "Програмна реалізація" web.xml з посиланням на специфікації Servlet 3.0+, що вимагає реалізації WebApplicationInitializer.
Таким чином, SpringBootApplication не вимагає "web.xml", оскільки його клас додатків (після розширення SpringBootServletInitializer) сканує
- @WebFilter,
- @WebListener та
- @WebServlet.
Анотація @ServletComponentScan
Ця анотація дозволяє сканувати базові пакети для веб-компонентів, помічених за допомогою @WebFilter, @WebListener та @WebServlet.
Через те, що вбудовані контейнери не підтримують анотації @WebServlet, @WebFilter та @WebListener, Spring Boot, значною мірою покладаючись на вбудовані контейнери, представив цю нову анотацію @ServletComponentScan для підтримки деяких залежних баночок, які використовують ці 3 анотації.
Сканування виконується лише при використанні вбудованого контейнера сервлетів.
Далі йде визначення мого додатка Spring Boot:
Спеціальний ініціалізатор сервлетів: -
Тут я визначив спеціальний клас: "ServletInitializer", який розширює клас: SpringBootServletInitializer.
Як було пояснено раніше, SpringBootServletInitializer відповідає за сканування приміток: -
- @WebFilter,
- @WebListener та
- @WebServlet.
А значить, Клас застосування Весняного завантаження повинен
- Або розширіть клас: SpringBootServletInitializer АБО
- розширити Спеціальний клас, який розширює клас: SpringBootServletInitializer