类可能被注解了@WebFilter(urlPatterns="*"),但是spring没有在请求时运行它。为什么?如果我添加@ServletComponentScan注解到应用程序类。它会工作得很好。С能以某种方式使它以不同的方式工作吗?
@WebFilter(urlPatterns="*")
@ServletComponentScan
vptzau2j1#
@ServletComponentScan @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
@ServletComponentScan将修复此问题
erhoui1w2#
ServletComponentScan注解对于启用扫描Servlet组件(包括Sping Boot 应用程序中的@WebServlet、@WebFilter和@WebListener)并将其注册到Servlet容器是必需的。我更愿意将@WebFilter与@ServletComponentScan一起使用,但还有另一种简单的方法,您可以使用@Component注册过滤器,而无需XML文件。
ServletComponentScan
@WebServlet
@WebFilter
@WebListener
@Component
@Component public class MyFilter implements Filter { ... }
如果没有特定的URL模式需要匹配,可以使用@Component注解将类标记为过滤器,通过实现OncePerRequestFilter接口,可以确保过滤器的doFilter()方法在每个请求中只执行一次。
OncePerRequestFilter
doFilter()
2条答案
按热度按时间vptzau2j1#
@ServletComponentScan
将修复此问题erhoui1w2#
ServletComponentScan
注解对于启用扫描Servlet组件(包括Sping Boot 应用程序中的@WebServlet
、@WebFilter
和@WebListener
)并将其注册到Servlet容器是必需的。我更愿意将
@WebFilter
与@ServletComponentScan
一起使用,但还有另一种简单的方法,您可以使用@Component
注册过滤器,而无需XML文件。如果没有特定的URL模式需要匹配,可以使用
@Component
注解将类标记为过滤器,通过实现OncePerRequestFilter
接口,可以确保过滤器的doFilter()
方法在每个请求中只执行一次。