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 之前或响应返回之前进行处理。

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

相关推荐
慕容卡卡21 小时前
Claude 使用神器(web页面)--CloudCLI UI
java·开发语言·前端·人工智能·ui·spring cloud
Sylvia-girl21 小时前
C++内存如何管理?
java·jvm·c++
极创信息21 小时前
信创领域五种主流CPU架构(X86 / ARM / RISC-V / MIPS / LoongArch)
java·arm开发·数据库·spring boot·mysql·软件工程·risc-v
空中海21 小时前
Spring Cloud第三篇:通信篇 — OpenFeign 与负载均衡
spring·spring cloud·负载均衡
_日拱一卒21 小时前
LeetCode:146LRU缓存
java·开发语言
StockTV21 小时前
韩国股票实时数据 KOSPI(主板)和 KOSDAQ(创业板)的实时行情、K 线及指数数据
java·开发语言·算法·php
Java成神之路-21 小时前
面试题:SpringMVC执行流程(视图版+前后端分离版)
java·springmvc
豆瓣鸡21 小时前
Agent实战练习
java·python·学习
weisian15121 小时前
Java并发编程--48-美团Leaf与百度UidGenerator:分布式ID生成器的工业级实践
java·leaf号段模式·leaf雪花模式·uidgenerator