Springboot过滤器和拦截器的区别
上两篇文章我们介绍了过滤器Filter和拦截器Intercepter,其功能都是对请求进行拦截并对请求过滤,本篇文章就介绍一下两者的区别
1. 过滤器和拦截器的区别
- 过滤器和拦截器触发时机不一样,过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。
- 拦截器可以获取IOC容器中的各个bean,而过滤器就不行,因为拦截器是spring提供并管理的,spring的功能可以被拦截器使用,在拦截器里注入一个service,可以调用业务逻辑。而过滤器是JavaEE标准,只需依赖servlet
api ,不需要依赖spring。 - 过滤器的实现基于回调函数。而拦截器(代理模式)的实现基于反射
- Filter是依赖于Servlet容器,属于Servlet规范的一部分,而拦截器则是独立存在的,可以在任何情况下使用。
- Filter的执行由Servlet容器回调完成,而拦截器通常通过动态代理(反射)的方式来执行。
- Filter的生命周期由Servlet容器管理,而拦截器则可以通过IoC容器来管理,因此可以通过注入等方式来获取其他Bean的实例,因此使用会更方便。
过滤器和拦截器非常相似,但是它们有很大的区别,最简单明了的区别就是过滤器可以修改request,而拦截器不能过滤器需要在servlet容器中实现,拦截器可以适用于javaEE,javaSE等各种环境拦截器可以调用IOC容器中的各种依赖,而过滤器不能过滤器只能在请求的前后使用,而拦截器可以详细到每个方法
总的来说
过滤器就是筛选出你要的东西,比如requeset中你要的那部分拦截器在做安全方面用的比较多,比如终止一些流程
网上有一张图片很不错,这里拷过来给大家看一下
- 过滤器(Filter) :可以拿到原始的http请求,但是拿不到你请求的控制器和请求控制器中的方法的信息。
- 拦截器(Interceptor):可以拿到你请求的控制器和方法,却拿不到请求方法的参数。
- 切片(Aspect): 可以拿到方法的参数,但是却拿不到http请求和响应的对象
2. 应用场景
拦截器是在DispatcherServlet这个servlet中执行的,因此所有的请求最先进入Filter,最后离开Filter。其顺序如下:
Filter -> Interceptor.preHandle -> Handler -> Interceptor.postHandle
-> Interceptor.afterCompletion -> Filter
2.1 拦截器应用场景
拦截器本质上是面向切面编程(AOP),符合横切关注点的功能都可以放在拦截器中来实现,主要的应用场景包括:
- 登录验证,判断用户是否登录。
- 权限验证,判断用户是否有权限访问资源,如校验token
- 日志记录,记录请求操作日志(用户ip,访问时间等),以便统计请求访问量。
- 处理cookie、本地化、国际化、主题等。性能监控,监控请求处理时长等。
- 通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有如提取
Locale、Theme信息等,只要是多个处理器都需要的即可使用拦截器实现)
2.2 过滤器应用场景
- 过滤敏感词汇(防止sql注入)
- 设置字符编码
- URL级别的权限访问控制
- 压缩响应信息
Springboot过滤器和拦截器的区别相关推荐
- JavaWeb中监听器Listener+过滤器filter+拦截器interceptor区别
JavaWeb中监听器Listener+过滤器filter+拦截器interceptor区别 如果从整个项目中看,一个servlet请求的执行过程就变成了这样context-param–>lis ...
- struts2 过滤器和拦截器的区别和使用
struts2 过滤器和拦截器的区别和使用 java web 过滤器和拦截器的区别和使用 1.1 什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming) ...
- AOP--Filter使用,过滤器和拦截器的区别
AOP(Aspect-Oriented Programming,面向切面编程)是一种编程思想,并不是一种具体的实现,谈到实现一般有Filter和代理模式两种常见的使用方式,Spring中的AOP也是封 ...
- springboot过滤器和拦截器
一.过滤器和拦截器的区别 1.过滤器和拦截器触发时机不一样,过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的.请求结束返回也是,是在servlet处理完后,返回给前端之前. 2.拦截 ...
- Springboot过滤器和拦截器详解及使用场景
一.过滤器和拦截器的区别 1.过滤器和拦截器触发时机不一样,过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的.请求结束返回也是,是在servlet处理完后,返回给前端之前. 2.拦截 ...
- Spring过滤器和拦截器的区别
Spring过滤器和拦截器的区别 两者的作用 过滤器: 是在javaweb中,你传入的request.response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts ...
- Java 过滤器与拦截器的区别
什么是过滤器(Filter) 过滤器,是在java web中将你传入的request.response提前过滤掉一些信息,或者提前设置一些参数.然后再传入Servlet或Struts2的 action ...
- SpringMVC中过滤器和拦截器的区别
文章目录 1.引言 2.共同点 3.区别 3.1.拦截器 3.2.过滤器 4.具体实现 4.1.拦截器 4.1.1.拦截实现方式 4.1.2.拦截实现 4.2.过滤器 4.2.1.过滤器实现方式 4. ...
- 过滤器跟拦截器的区别
一.拦截器与过滤器的区别总结 1. 原理不同:拦截器是基于java的反射机制的,而过滤器是基于函数回调. 2. 依赖容器:拦截器不依赖与servlet容器,过滤器依赖与servlet容器. 3. 作用 ...
最新文章
- 有助于改善性能的技巧(1)
- java代码连接oracle数据库连接_在JAVA中连接Oracle数据库(例子)
- centos7搭建SVN+Apache+IF.svnadmin支持https实现web管理SVN
- Java与ElasticSerach的整合
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建
- 高并发异步uwsgi+web.py+gevent
- paip.语义分析--单字动词表.txt
- 计算机模拟在材料加工研究中的应用,计算机在材料科学中的应用
- 薄膜单点压力传感器的制作
- php盘古分词,百度分词技术_百度输入法分词怎么关_百度分词原理
- python做地图导航_【Python】利用高德地图做你想做之事
- 关于SDRAM存储器
- RAM、ROM、emmc、iNand、SD卡、mmc 与 Nandflash 的区别
- 【Proteus仿真】ATMEGA16 ADC转化数码管显示
- MKVToolNix 修改电影默认音轨
- 思科计算机网络设计局域网,CISCO局域网设计(毕业设计)_图文.doc
- 最高月薪20K?平均薪资近万...在华为子公司工作是什么体验?
- IPTV界面产品设计的几点思考
- BUUCTF msic 专题(59)[SWPU2019]伟大的侦探
- 除了阿里AI设计师“鲁班”,设计师还能用AI做什么?