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

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

相关推荐
奔跑吧邓邓子17 小时前
【Java实战㉟】Spring Boot与MyBatis:数据库交互的进阶之旅
java·spring boot·实战·mybatis·数据库交互
赛姐在努力.17 小时前
Spring DI详解--依赖注入的三种方式及优缺点分析
java·mysql·spring
IvanCodes18 小时前
六、Docker 核心技术:Dockerfile 指令详解
java·数据库·docker
_oP_i18 小时前
Java 服务接口中解决跨域(CORS,Cross-Origin Resource Sharing)问题
java·开发语言
孤独的人18 小时前
WordPress 性能优化:从插件到 CDN 的全方位缓存设置指南
spring·缓存·性能优化
用户94468140135018 小时前
部分替代Lombok?不可变数据的载体?一篇文章带你了解JDK16正式引用的record类型!
java
用户03321266636718 小时前
Java 高效处理 Word 文档:查找并替换文本的全面指南
java
轮到我狗叫了18 小时前
力扣.1054距离相等的条形码力扣767.重构字符串力扣47.全排列II力扣980.不同路径III力扣509.斐波那契数列(记忆化搜索)
java·算法·leetcode
渣哥18 小时前
你遇到过 ConcurrentModificationException 吗?其实很常见
java
lunzi_fly19 小时前
【源码解读之 Mybatis】【基础篇】-- 第1篇:MyBatis 整体架构设计
java·mybatis