Spring MVC 拦截器(Interceptor)与过滤器(Filter)的区别?

1、两者概述

  • 拦截器(Interceptor): 只会拦截那些被 @Controller 或 @RestController 标注的类中的方法处理的请求,也就是那些由 Spring MVC 调度的请求。
  • 过滤器(Filter): 会拦截所有类型的 HTTP 请求,包括静态资源和后台 API。

2、什么是 Controller 处理的请求?

  • Controller 是 Spring MVC 的核心组件之一,用于处理用户的 HTTP 请求,并返回响应。
  • 请求会根据 URL 路径、请求方法(GET/POST) 等信息,映射到 Controller 的某个方法上来处理。

3、两者区别

示例图

4、两者示例

  1. 拦截器(Interceptor)
java 复制代码
@Component
public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        System.out.println("请求前拦截");
        return true; // 返回 false 则拦截请求
    }
}
  1. 过滤器(Filter)
java 复制代码
@WebFilter("/*")
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
            throws IOException, ServletException {
        System.out.println("请求进入过滤器");
        chain.doFilter(request, response);
    }
}

5、两者应用场景

拦截器与过滤器的应用场景

  1. 拦截器(Interceptor):

    主要用于 Spring MVC 层,用于处理和控制 Controller 层的请求。

    适用于权限验证、日志记录、统一返回格式、性能监控等需要操作 Controller 层请求的场景。

  2. 过滤器(Filter):

    主要用于 Servlet 层,在请求到达 DispatcherServlet 之前或响应返回之前进行处理。

    适用于跨域处理、安全防护、日志记录、字符编码、性能优化等更底层的操作。

相关推荐
Miraitowa_cheems15 分钟前
LeetCode算法日记 - Day 81: 最大子数组和
java·数据结构·算法·leetcode·决策树·职场和发展·深度优先
CodeCraft Studio21 分钟前
国产化Word处理控件Spire.Doc教程:用Java实现TXT文本与Word互转的完整教程
java·c#·word·spire.doc·word文档转换·txt转word·word转txt
徐子童27 分钟前
数据结构---优先级队列(堆)
java·数据结构·面试题·优先级队列··topk问题
滑水滑成滑头32 分钟前
**标题:发散创新:智能交通系统的深度探究与实现**摘要:本文将详细
java·人工智能·python
siriuuus1 小时前
Maven 核心概念及生命周期
java·maven
闭着眼睛学算法1 小时前
【双机位A卷】华为OD笔试之【哈希表】双机位A-跳房子I【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
java·c语言·c++·python·算法·华为od·散列表
孔明兴汉1 小时前
Cursor MCP 第一章-第一节-MCP协议简介.md
java·ai
信仰_2739932431 小时前
枚举类Enum反编译后效果
java·开发语言
TDengine (老段)1 小时前
TDengine 数学函数 LOG 用户手册
java·大数据·数据库·时序数据库·iot·tdengine·涛思数据
青皮桔1 小时前
Java+OpenCV实现图片切割
java·后端·opencv·计算机视觉