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

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

相关推荐
王桑.6 分钟前
Spring中IoC的底层原理
java·后端·spring
Liii40311 分钟前
Java集合详细讲解
java·开发语言
Han.miracle32 分钟前
Spring Boot 项目从入门到排障:核心结构、依赖管理与启动全解析
java·jar
麦麦鸡腿堡39 分钟前
Java_通过反射获取类的结构信息
java·开发语言
还是鼠鼠1 小时前
SQL语句执行很慢,如何分析呢?
java·数据库·mysql·面试
爱装代码的小瓶子1 小时前
【c++知识铺子】封装map和set(详细版)
android·java·c++
2201_757830871 小时前
tlias的部门的增删改查操作
java·开发语言
雨雨雨雨雨别下啦1 小时前
Spring AOP概念
java·后端·spring
on the way 1231 小时前
day04-Spring之Bean的生命周期
java·后端·spring
代码笔耕1 小时前
面向对象开发实践之消息中心设计(二)
java·后端·架构