面试官说问个冷门的题:过滤器与拦截器的区别?我寻思着这有啥难的
# 拦截器(Interceptor)和过滤器(Filter)的区别
- https://segmentfault.com/a/1190000022833940
- https://cloud.tencent.com/developer/article/1839568
用户的普通 Http 请求执行顺序:
过滤器、拦截器添加后的执行顺序:
1)使用范围不同:
- 过滤器 实现的是
javax.servlet.Filter
接口,而这个接口是在Servlet
规范中定义的,也就是说过滤器Filter
的使用要依赖于Tomcat
等容器,导致它只能在web
程序中使用 - 而拦截器(
Interceptor
) 它是一个Spring
组件,并由Spring
容器管理,并不依赖Tomcat
等容器,是可以单独使用的。不仅能应用在web
程序中,也可以用于Application
、Swing
等程序中。
2)具体功能不同:
- 过滤器主要用于对用户请求进行预处理
- 拦截器主要用于对现有方法进行动态增强
3)触发时机不同:
过滤器是在请求进入容器后、进入 Servlet 之前触发;请求结束是在 Servelet 处理完、返回给前端之前触发
拦截器是在请求进入 Servlet 之后才触发
4)底层实现不同:
- 过滤器是基于回调函数的(每次请求都会调用 doFilter 方法,通过 FilterChain 回调函数调用后续的 Filter,如果后续没有 Filter 则表示对此条请求进行放行)
- 拦截器是基于反射(动态代理)的
🎁 公众号

各位小伙伴大家好呀,叫我小牛肉就行,目前在读东南大学硕士,上方扫码关注公众号「飞天小牛肉」,与你分享我的成长历程与技术感悟~
帮助小牛肉改善此页面 (opens new window)
Last Updated: 2023/02/16, 11:27:10