过滤器和拦截器的不同以及执行顺序和使用场景的总结

本文详细比较了过滤器(filter)和拦截器(interceptor)的区别,包括实现原理、依赖性、作用范围、自动注入能力及执行顺序。并探讨了它们在日志记录、权限检查、性能监控和通用行为等场景下的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

过滤器filter和拦截器interceptor的比较

之前看过一篇博客有这么一句话:

过滤器是取你所想,拦截器是拒你所不想

但其实两者都可以理解为起过滤的作用。

具体区别而言,总结有如下几点:

方面filterinterceptor
实现原理基于函数回调java反射,动态代理
是否依赖servletjava原生,依赖servletspring框架所有,不依赖servlet
作用范围所有的url,可以配置无法配置url,只是针对实现某接口的类的方法在其前后进行处理,这也正是动态代理的逻辑
是否可以自动注入context中的bean不能,但可以通过getBean方法获得可以
如何选择在纯Java的应用中尽量选择filter,减小第三方在spring应用中官方推荐interceptor

执行顺序

过滤器 -> 拦截器 -> aop -> 业务逻辑 -> 拦截器的post方法 -> filter的destroy

使用场景

  1. 日志记录:记录请求相关的日志,容易进行统计和监控。

  2. 权限检查:如登录检测 。

  3. 性能监控或者问题排查:拦截器可以在某个方法执行前后进行处理,通过拦截器可以将一个请求的调用链每个环节的时间打印出来进行问题排查,当然现在可以使用APM;

  4. 通用行为:获取一些全局需要的信息,例如通过token获得用户信息,将用户信息放在securityContext中,通过@ModelAttribure直接在controller中使用。


推荐阅读:
@ModelAttribute实践总结

看了同事代码,我发现我不会枚举

spring DispatcherSeervlet请求处理逻辑

spring启动过程分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值