拦截器和过滤器的区别

1. 规范来源不同

  • 过滤器(Filter)​
    基于 ​Servlet 规范​(JSR-315),是 Java Web 标准组件,不依赖任何框架(如 Tomcat、Jetty 原生支持)。
  • 拦截器(Interceptor)​
    基于 ​Spring MVC 框架,是 Spring 生态的扩展功能,需要 Spring 环境支持。

2. 作用范围不同

  • 过滤器
    • 全局性:作用于所有请求(包括静态资源、JSP、Servlet)。
    • 底层控制:处理 HTTP 请求/响应的原始数据(如修改 Header、Body)。
  • 拦截器
    • 针对性:仅作用于 Spring MVC 的控制器(Controller)请求。
    • 业务集成:可访问 Spring 上下文(如 Controller 方法、参数、返回值)。

3. 执行时机不同

  • 执行顺序
    请求阶段Filter → DispatcherServlet → Interceptor → Controller
    响应阶段Interceptor → Filter
  • 生命周期
    • 过滤器:随 Web 容器(如 Tomcat)启动初始化,服务停止时销毁。
    • 拦截器:随 Spring 容器启动初始化,作为 Bean 由 Spring 管理。

4. 功能与使用场景

  • 过滤器的典型场景
    • 字符编码转换(CharacterEncodingFilter)。
    • 跨域处理(CORS)。
    • 请求日志记录(如记录 IP、URL)。
    • 安全防护(XSS 过滤、敏感词拦截)。
  • 拦截器的典型场景
    • 权限验证(如登录状态检查)。
    • 接口耗时统计(在 preHandle 和 postHandle 计算时间)。
    • 参数预处理(如自动 trim 空格)。
    • 统一日志记录业务操作(如记录用户行为)。

5. 控制粒度与灵活性

  • 过滤器
    • 粗粒度:处理原始请求/响应,无法直接干预 Controller 方法。
    • 依赖 Servlet API:操作 ServletRequest 和 ServletResponse
  • 拦截器
    • 细粒度:可获取 Controller 方法信息(如注解、参数名)。
    • 支持 AOP:结合 Spring 的切面能力,实现更灵活的业务拦截。

6. 配置方式不同

  • 过滤器
    • 通过 web.xml 或 @WebFilter 注解配置。
    • 示例:
       

      xml

      <filter>
          <filter-name>logFilter</filter-name>
          <filter-class>com.example.LogFilter</filter-class>
      </filter>
      <filter-mapping>
          <filter-name>logFilter</filter-name>
          <url-pattern>/*</url-pattern>
      </filter-mapping>
  • 拦截器
    • 通过 Spring 配置类实现 WebMvcConfigurer 并注册拦截器。
    • 示例:
       

      java

      @Configuration
      public class WebConfig implements WebMvcConfigurer {
          @Override
          public void addInterceptors(InterceptorRegistry registry) {
              registry.addInterceptor(new AuthInterceptor())
                      .addPathPatterns("/api/**");
          }
      }

回答总结(关键差异)​

维度过滤器(Filter)​拦截器(Interceptor)​
规范Servlet 规范,通用性强Spring 框架,依赖容器
作用范围所有请求(包括静态资源)仅 Controller 请求
执行顺序更早(在 Servlet 前)较晚(在 Controller 前后)
功能场景数据清洗、全局安全业务逻辑拦截、参数处理
灵活性基于 Servlet API,功能较基础深度集成 Spring,支持业务扩展

加分回答(适用场景建议)​

  • 优先使用过滤器
    需要处理所有请求(如静态资源缓存、全局安全过滤)。
  • 优先使用拦截器
    需要与业务逻辑紧密集成(如权限校验、参数校验)。
  • 组合使用
    例如用过滤器解决跨域,用拦截器记录接口性能,实现分层处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值