Como todos sabem, o Spring Boot é uma maneira maravilhosa de desenvolver um WebApp ou StandaloneApp com configuração mínima e instalação opinativa.
Foi assim que consegui um desenvolvimento de filtro da Web no aplicativo Spring Boot
My SpringBootApp Especificações: -
Versão Spring Boot: 2.0.4.RELEASE
Versão Java: 8.0
Especificação de Servlet: Servlet 3.0 (obrigatório e importante)
Declarei meu filtro da Web da seguinte maneira, aderindo às especificações de servlet 3.0
Essa é a maneira programática de definir um filtro como um substituto das definições baseadas no web.xml.
A anotação "@Webfilter" será processada pelo contêiner durante a implantação, a classe Filter na qual ela será encontrada será criada conforme a configuração e aplicada aos padrões de URL, javax.servlet.Servlets e javax.servlet.DispatcherTypes.
Para evitar completamente o Web.xml e obter o WebApp "Implantável": -
Para implantar o aplicativo Spring Boot como "WAR tradicional", a classe do aplicativo deve estender o SpringBootServletInitializer.
NOTA ::
SpringBootServletInitializer é uma "Implementação Programática" do web.xml com referência às especificações do Servlet 3.0+, que requer uma implementação do WebApplicationInitializer.
Portanto, SpringBootApplication não requer "web.xml", pois sua classe Application (após estender o SpringBootServletInitializer) procura
- @WebFilter,
- @WebListener e
- @WebServlet.
Anotação @ServletComponentScan
Esta anotação permite a varredura de pacotes base para os componentes da web anotados com @WebFilter, @WebListener e @WebServlet.
Como os contêineres incorporados não suportam as anotações @WebServlet, @WebFilter e @WebListener, o Spring Boot, contando bastante com os contêineres incorporados, apresentou esta nova anotação @ServletComponentScan para suportar alguns jars dependentes que usam essas três anotações.
A digitalização é realizada apenas ao usar um contêiner Servlet incorporado.
A seguir está a minha definição de classe de aplicativo de inicialização Spring: -
Inicializador de servlet personalizado: -
Aqui: eu defini uma classe personalizada: "ServletInitializer" que estende a classe: SpringBootServletInitializer.
Conforme explicado anteriormente, o SpringBootServletInitializer é responsável pela verificação das anotações: -
- @WebFilter,
- @WebListener e
- @WebServlet.
E, portanto, a classe de aplicativo Spring Boot deve
- Estenda a classe: SpringBootServletInitializer OU
- estender Classe personalizada que estende a classe: SpringBootServletInitializer