springboot中使用Filter主要有两种方式:
首先写一个Filter类继承Filter,然后再这个类上加上@WebFilter(urlPatterns = "/*")注解,路径表示需要过滤的路径。具体实现如下:
@WebFilter(filterName = "MyFilter",urlPatterns = "/*") public class MyFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { System.out.println("进入了MyFilter。。。。。。。。。。。"); chain.doFilter(req, resp); } public void init(FilterConfig config) throws ServletException { } }
但是这个时候,Springboot并不知道你加了Filter,所以需要在Main方法上加上@ServletComponentScan注解,表示Servlet组件扫描同时他也可以扫描Filter,可以加上参数basePackages来说明需要扫描的包是哪个。具体如下:
@SpringBootApplication//SpringBoot的全局的自动配置注解,所有的业务类都要放在子包下,才能自动配置 @ServletComponentScan(basePackages = {"com.kunkun.springboot.servlet","com.kunkun.springboot.filter"})//servlet扫描和过滤器扫描 public class Application { public static void main(String[] args) { //固定的代码,启动SpringBoot程序,初始化Spring容器 SpringApplication.run(Application.class, args); } }
这样就完成了Filter的配置:结果如下:
首先实现一个正常的Filter,如下:
public class HeFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { System.out.println("进入了HeFilter。。。。。"); chain.doFilter(req, resp); } public void init(FilterConfig config) throws ServletException { } }
然后实现一个配置类,如下:
@Configuration public class FilterConfig { @Bean public FilterRegistrationBean registrationBean(){ FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new HeFilter()); filterRegistrationBean.addUrlPatterns("/*"); return filterRegistrationBean; } }
这边基本和Servlet的配置类一样,输出结果如下:
原文:https://www.cnblogs.com/quintanliu/p/13427843.html