SpringBoot过滤器的使用,两种方式:1、注解的方式 2、spring配置的方式
代码说明:
?1、filterName表示filter的名称,urlPatters表示要拦截的URL资源,可以是多个。
?2、order(1)过滤器的运行等级,数字越小,越先执行。
? ? 3、init()方法只会执行一次,初始化过滤器。??
????4、doFilter()核心方法,配置过滤器的逻辑代码。?
? ??5、destroy()只会在项目停止或者是项目重新部署的时候才会执行。
注解的方式
在springboot 启动类添加该注解@ServletComponentScan,也可以写包的具体地址,传参数@ServletComponentScan("com.test.demo.filter")
@SpringBootApplication
@ServletComponentScan
public class ApplicationMain {
public static void main(String[] args) {
SpringApplication.run(ApplicationMain.class, args);
}
}
? ? 定义一个TestFilter 实现Filter接口,重写里面的三个方法?。
@Order(1)
@WebFilter(filterName = "testFilter",urlPatterns = {"/*"})
public class TestFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("初始化过滤器");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("进入资源之前操作");
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("处理一下服务端返回操作");
}
@Override
public void destroy() {
System.out.println("过滤器被销毁了");
}
}
spring配置的方式
定义一个TestFilter 实现Filter接口,重写里面的三个方法?。
public class TestFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("初始化过滤器");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("进入资源之前操作");
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("处理一下服务端返回操作");
}
@Override
public void destroy() {
System.out.println("过滤器被销毁了");
}
}
定义一个spring配置文件,将自定义的Filter 注册到到FilterRegistrationBean里面。
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean registFilter(){
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(new TestFilter());
registrationBean.addUrlPatterns("/*");
registrationBean.setName("testFilter");
registrationBean.setOrder(1);
return registrationBean;
}
}
? ? controller测试
@RestController
@RequestMapping("/test")
public class FilterController {
@RequestMapping("/testFilter")
public String testFilter(){
System.out.println("filter执行成功");
return "filter";
}
}
完成之后启动项目,访问接口:localhost:8080/test/testFilter,观察控制台运行结果。?