1、两者概述
- 拦截器(Interceptor): 只会拦截那些被 @Controller 或 @RestController 标注的类中的方法处理的请求,也就是那些由 Spring MVC 调度的请求。
- 过滤器(Filter): 会拦截所有类型的 HTTP 请求,包括静态资源和后台 API。
2、什么是 Controller 处理的请求?
- Controller 是 Spring MVC 的核心组件之一,用于处理用户的 HTTP 请求,并返回响应。
- 请求会根据 URL 路径、请求方法(GET/POST) 等信息,映射到 Controller 的某个方法上来处理。
3、两者区别
示例图
4、两者示例
- 拦截器(Interceptor)
@Component
public class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {System.out.println("请求前拦截");return true; // 返回 false 则拦截请求}
}
- 过滤器(Filter)
@WebFilter("/*")
public class MyFilter implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {System.out.println("请求进入过滤器");chain.doFilter(request, response);}
}
5、两者应用场景
拦截器与过滤器的应用场景
-
拦截器(Interceptor):
主要用于 Spring MVC 层,用于处理和控制 Controller 层的请求。
适用于权限验证、日志记录、统一返回格式、性能监控等需要操作 Controller 层请求的场景。 -
过滤器(Filter):
主要用于 Servlet 层,在请求到达 DispatcherServlet 之前或响应返回之前进行处理。
适用于跨域处理、安全防护、日志记录、字符编码、性能优化等更底层的操作。