
HandlerInterceptor和Filter是 Java Web 开发中用于请求拦截的两个核心组件,它们看起来功能相似,但本质归属、作用范围和能力上有根本差异。结合官方文档和实践经验,我给你做一个从原理到实践的全面分析。🎯 定位速览:它们分别是谁的“兵”?过滤器(Filter):是Servlet 规范的一部分,归属于 Web 容器(如 Tomcat)。它拦截的是所有进入容器的请求,包括静态资源(图片、CSS)、Servlet 等,是最外层的“门卫”。拦截器(HandlerInterceptor):是Spring MVC 框架的一部分。它只拦截由 Spring 的DispatcherServlet分发的、发往Controller 的请求,是更靠近业务层的“安检员”。为了更直观地展示它们的差异,我整理了这个对比表格:对比维度Filter(过滤器)HandlerInterceptor(拦截器)所属规范/框架Java Servlet 规范Spring MVC 框架实现机制函数回调AOP/反射机制作用范围所有 Web 资源(/*),包括静态资源仅Controller 请求(如/api/*)是否可修改请求✅可以(通过装饰模式包装 Request/Response)❌不可以,只能读取原始 Request/Response