一、理解核心概念
在 Java Web 开发中,**过滤器(Filter)和拦截器(Interceptor)**是两种核心的请求处理机制。它们虽然都能对请求进行拦截和处理,但定位截然不同:
- Filter 是 Servlet 容器的'守门人',位于应用最外层
- Interceptor 是 Spring MVC 的'执法官',位于框架内部
二、Filter:Servlet 容器的第一道防线
2.1 本质与特点
Filter 是 Java Servlet 规范 定义的组件,由 Servlet 容器(如 Tomcat)直接管理,不依赖任何框架,因此具有最强的通用性。
生命周期方法:
| 方法 | 触发时机 | 用途 |
|---|---|---|
| init() | 应用启动时 | 初始化配置 |
| doFilter() | 每次请求 | 核心处理逻辑 |
| destroy() | 应用关闭时 | 资源释放 |
执行流程:
请求 → Filter1 → Filter2 → Servlet/Controller → Filter2 → Filter1 → 响应
2.2 Spring Boot 中的实现方式
方式一:注解方式(适合简单场景)
@WebFilter(urlPatterns = "/api/*", filterName = "authFilter")
public class AuthFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// 前置处理
System.out.println("认证检查开始");
// 放行到下一个 Filter 或目标资源
chain.doFilter(request, response);
// 后置处理(响应返回时执行)
System.out.println("认证检查结束");
}
}
// 在主类开启扫描
@SpringBootApplication
@ServletComponentScan
{
}

