过滤器和拦截器?二者的区别?

过滤器和拦截器在Web开发中扮演不同角色,主要区别如下:


目录

1. 作用层次不同

2. 执行顺序

3. 功能范围

4. 生命周期与配置

5. 核心接口与方法

6. 典型场景

总结


1. 作用层次不同

  • 过滤器(Filter):属于Servlet规范,工作在Servlet容器层面,处理所有进入容器的HTTP请求(如静态资源、动态请求)。
  • 拦截器(Interceptor):属于框架层(如Spring MVC),仅拦截处理控制器(Controller)的请求,不处理静态资源。

2. 执行顺序

  • 请求流程
    客户端请求 → 过滤器(前处理) → DispatcherServlet → 拦截器(preHandle) → 控制器方法 → 拦截器(postHandle) → 视图渲染 → 拦截器(afterCompletion) → 过滤器(后处理) → 响应返回。
  • 过滤器在拦截器前后执行,拦截器仅在控制器方法前后介入。

3. 功能范围

  • 过滤器
    • 通用预处理(如设置字符编码、日志记录)。
    • 修改请求/响应内容(如压缩、加密)。
    • 无法访问Spring上下文或方法参数。
  • 拦截器
    • 业务逻辑处理(如权限校验、日志记录操作细节)。
    • 可获取方法参数、返回值,访问Spring Bean。
    • 支持更细粒度控制(通过注解或路径匹配)。

4. 生命周期与配置

  • 过滤器
    • 由Servlet容器管理,生命周期独立于Spring。
    • 配置方式:web.xml@WebFilter注解。
  • 拦截器
    • 由Spring容器管理,生命周期与Bean一致。
    • 配置方式:实现HandlerInterceptor接口或使用@Component+路径匹配。

5. 核心接口与方法

  • 过滤器
    • 接口:javax.servlet.Filter
    • 方法:doFilter(ServletRequest, ServletResponse, FilterChain)
    • 通过FilterChain控制请求放行或终止。
  • 拦截器
    • 接口:org.springframework.web.servlet.HandlerInterceptor
    • 方法:
      • preHandle():控制器方法前执行。
      • postHandle():方法后、视图渲染前执行。
      • afterCompletion():视图渲染后执行(常用于资源清理)。

6. 典型场景

  • 过滤器适用场景
    • 全局字符编码设置。
    • 跨域请求(CORS)处理。
    • 请求日志统一记录。
  • 拦截器适用场景
    • 用户登录状态校验。
    • 操作日志记录(含方法参数)。
    • 事务管理(如@Transactional的AOP实现)。

总结

特性过滤器(Filter)拦截器(Interceptor)
作用范围所有HTTP请求(含静态资源)仅控制器请求
访问权限无法访问Spring上下文可访问Spring Bean及方法参数
配置方式web.xml@WebFilterSpring配置或@Component+路径匹配
生命周期Servlet容器管理Spring容器管理
典型用途全局预处理(编码、日志)业务逻辑控制(权限、日志、事务)

选择依据

  • 需要全局处理或修改请求/响应内容时用过滤器。
  • 需要细粒度业务控制或访问Spring上下文时用拦截器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值