filetr的作用/使用场景:
- 实现用户会话的统一管理
- 记录用户请求信息
- 统计请求响应的执行时间
- 响应数据过滤敏感信息
- 数据脱敏:数据库保存完整的数据,返回给前端是部分数据,如手机号显示184****0957
filter可以有多个
filter的执行流程
客户端发送http请求后,先调用filter1,再调用filter2 ,最后再调用Servlet 服务端响应时,先调用filter2 ,再调用filter1
-
如果filter要继续往下执行,调用
filterChain.doFilter(request,response) 即可(往过滤器链【filterChain】的下一个节点【下一个过滤器】执行,如果没有下一个节点,通过url查找服务资源【Servlet或静态资源】 ) -
如果不想继续执行,不调用doFilter()方法,filter自己返回响应
package org.example.filter;
import javax.servlet.*;
import java.io.IOException;
public class TestFilter implements Filter { //实现Filter接口 需要重写方法
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
}
@Override
public void destroy() {
}
}