过滤器Filter
简介
- 来自J2EE中的Servlet技术
- 实现原理:基于servlet的函数回调实现
- 只可以获取到请求中的request和response,无法获取到响应方法的信息
- 可以拦截所有请求
- 支持使用xml配置和注解配置
- 应用场景:权限认证、敏感词检测、访问日志记录等
使用方法
-
实现
Filter
接口,重写doFilter
方法; -
放行请求时调用
chain.doFilter()
方法; -
启用该过滤器,有三种方式,一种是比较原始的xml配置,这我就不写了,需要的同学请查看其它人的文章。
第二种是使用注解
@WebFilter()
,并在启动类上添加@ServletComponentScan
注解使用。第三种是直接使用
@Component
注解,这样的话@WebFilter配置的路径会失效,因为@WebFilter根本就没生效,不信自己去试试😘。下面我使用的是第二种方式,更灵活
-
设置拦截路径,就是要拦截的那个url路径。
代码实现
过滤器代码
@Slf4j
@WebFilter(value = "/name") //这里我们只拦截name请求,记得要在启动类配ServletComponentScan
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
log.info("before filter");
// 请求放行
chain.doFilter(request, response);
log.info("after filter");
}
}
复制代码
Controller代码
@Slf4j
@RestController
public class MyController {
@GetMapping("/name")
public String getName() {
log.info("getName");
return "sticki";
}
}
复制代码
测试
发送请求
查看控制台,可以观察到执行的顺序是按照我们代码中的前后顺序来执行的。