SpringBoot下过滤器,拦截器,切片一些区别

1、过滤器,拦截器,切片可以取到数据的差别

过滤器:可以拿到原始的HTTP请求和响应信息,拿不到处理请求的方法值信息。

拦截器:可以拿到HTTP请求和响应信息,可以获取到拦截的类名称、方法名称,不能获取到方法参数,原因是在dispatcherservlet源码中,经过preHandle才对方法参数通过request里面开始处理拼接)。

切片:可以拿到请求方法的传入参数值,拿不到原始的HTTP请求和响应的对象。

2、过滤器filter和拦截器Interceptor的区别

spring的拦截器和servlet的过滤器有相似之处,都是AOP思想的体现,都可以实现权限检查,日志记录,不同的是

适用范围不同:Filter是Servlet容器规定的,只能使用在servlet容器中,而拦截器的使用范围就大得多。

使用的资源不同:拦截器是属于spring的一个组件,因此可以使用spring的所有资源,对象,如service对象,数据源,事务控制等,而过滤器就不行。

深度不同:Filter还在servlet前后起作用。而拦截器能够深入到方法前后,异常抛出前后,因此拦截器具有更大的弹性,所有在spring框架中应该优先使用拦截器。

通过调试可以发现,拦截器的执行过程是在过滤器的doFilter中执行的,过滤器的初始化会在项目启动时执行。
 

过滤器1开始初始化
过滤器2开始初始化

过滤器1开始工作:http://127.0.0.1:17093/testFilter
过滤器2开始工作:http://127.0.0.1:17093/testFilter
拦截器1 preHandle: 请求的uri为:http://127.0.0.1:17093/testFilter
拦截器2 preHandle: 请求的uri为:http://127.0.0.1:17093/testFilter
aop1开始:
aop1拦截方法参数arg is:abc
aop1拦截方法参数arg is:123
aop2开始:
aop2拦截方法参数arg is:abc
aop2拦截方法参数arg is:123
控制器testFilter开始工作:str='abc',integer=123
aop2结束:
aop1结束:
拦截器2 postHandle: 
拦截器1 postHandle: 
拦截器2 afterCompletion: 
拦截器1 afterCompletion: 
过滤器2结束工作:
过滤器1结束工作:

这里通过一张图来说明过滤器和拦截器执行顺序

过滤器拦截器执行顺序图

若三者共存的情况下执行顺序

正常运行顺序为:filter-interceptor-controllerAdvice-aspect-controller
异常情况下:controller-aspect-controllerAdvice-interceptor-filter

过滤器、Servlet容器、拦截器、AOP、Controller之间的关系

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值