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

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

相关推荐
tHeya06II9 分钟前
涵盖 Cursor、Claude Code、Skills
java·服务器
kim_puppy11 分钟前
TCP的三次握手,四次挥手
java·网络·tcp
诗人不写诗12 分钟前
spring boot apm生态
java·数据库·spring boot
海参崴-12 分钟前
C++代码格式规范
java·前端·c++
better_liang36 分钟前
每日Java面试场景题知识点之-Redisson热门使用场景
java·redis·微服务·分布式锁·redisson·分布式系统
2301_7926748639 分钟前
java学习 day26
java
so2F32hj240 分钟前
拆解 OpenHands(14)--- Microagents
java·开发语言
明灯伴古佛1 小时前
面试:什么是可重入性?为什么 synchronized 是可重入锁?
java·jvm·面试
卓怡学长1 小时前
m307自习室预订座位管理分析与实现
java·spring boot·spring
Arya_aa1 小时前
生猪养殖溯源系统前期准备与SpringBoot框架
java·spring boot