SpringBoot入门到精通系列教程 - Filter/WebFilter
1. Filter简介
通过Filter技术,对各种资源:例如API, JSP,Servlet,静态图片文件或静态HTML文件进行拦截,从而实现一些特殊功能。如实现token校验,URL级别的权限控制、过滤敏感词汇、额外记录日志、压缩响应信息等一些高级功能。
'
1.1. SpringBoot 中Filter的作用
- 在request被处理前,预处理,或者修改request。比如,所有的api都要做鉴权处理,通过后才会被业务逻辑处理,这部分逻辑就可以卸载Filter中。
- 修改一个response,比如附加一些额外的信息再返回给Client。
- 可以定义多个Filter,并指定执行的顺序。
1.2. @WebFilter
Servlet3+ 额外增加的WebFilter注释, 方便处理Web应用中的场景。
2. 基于@WebFilter的实现
环境:
- Java 1.8.0_05
- Spring Boot: 2.4.1
- IDE: Intellj IDEA 2020.3
2.1. SpringbootApplication方法上加上启动扫描
@ServletComponentScan
@SpringBootApplication
public class TodoApiApplication {
// ... ...
}
2.2. 新建Filter
@WebFilter(filterName = "AuthFilter", urlPatterns = {"/todo-api/v1/tasks/*", "/todo-api/v1/order/*"})
@Order(1)
public class AuthFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
// 预处理 Request
// "Request - "+ request.getMethod() + ":"+ request.getRequestURI()
// ... ...
// 最后,让其他servlet或者Filter继续处理
filterChain.doFilter(servletRequest,servletResponse);
}
}
2.3. 关于WebFilter
- Order(x) 里面的x数值越小优先级越高
- 根据需要,可以重载init,destroy方法
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("过滤器创建");
}
@Override
public void destroy() {
System.out.println("过滤器销毁");
}
3. 总结
Filter (@WebFilter) 用于拦截Web请求,进行预处理,或者修改Response再返回给客户端。
---------- END ----------