SpringBoot的过滤器是基于Servlet的Filter实现的,所以在原理上没有实质的变化,只是使用方式上有点区别
基于FilterRegistrationBean实现实现过滤器有很多种方式,这里介绍其中一种,基于FilterRegistrationBean实现过滤器,只需2步即可
前提准备:准备一个spring-boot项目即可,业务代码示例如下
@RestController
public class DemoController {
@PostMapping("/zx/demo/test")
public String test() {
System.out.println("hello test");
return "hello";
}
}
过滤器实现步骤如下
首先定义一个过滤器类,实现Filter接口,代码如下
public class baseFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("过滤前置处理");
chain.doFilter(request, response);
System.out.println("过滤后置处理");
}
}
然后将过滤器类手动创建出来,设置到FilterRegistrationBean,springboot会自动将其注册到过滤链中
@Configuration
public class FilterConfiguration {
@Bean
public FilterRegistrationBean registrybaseFilter() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
baseFilter baseFilter = new baseFilter();
filterRegistrationBean.setFilter(baseFilter);
filterRegistrationBean.setOrder(-1);
filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));
filterRegistrationBean.setName("baseFilter");
return filterRegistrationBean;
}
}
这里额外引入了一个Configuration,为了方便所有的过滤器统一管理
通过以上的代码,就完成了一个过滤器的实现,当请求任何一个接口,都会执行过滤代码,效果如下
过滤前置处理 hello test 过滤后置处理过滤器使用场景
在实际工作中,实现基础架构能力有3大利器,都是基于拦截器、过滤器、AOP来实现的,过滤器就是其中之一。
过滤器的使用场景主要有日志、监控、鉴权等,详细介绍如下
日志
- 在日志中增加Trace
- 打印请求的耗时
监控
- 上报接口请求的信息,比如成功、失败、耗时
鉴权
- 获取用户信息,解析账号,放入全局上下文



