springboot三种拦截器( 二 )

我们新增个Controller来测试下他们的运行顺序
import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;import java.util.Map;@RestControllerpublic class DemoController {@GetMapping("/demo")public Map test() {Map map = new HashMap() ;map.put("a","123") ;return map ;}}我们访问http://localhost:{port}/demo可以看到后台打印如下日志
 

springboot三种拦截器

文章插图
 
可以看出他们的拦截顺序:filter—>Interceptor—->@Aspect。以下这个图可以比较直观看出他们之间的拦截顺序
springboot三种拦截器

文章插图
 
总结: 过滤器和拦截器的区别,过滤器是依赖于servlet容器(struts),在实现上基于函数回调,可以对几乎所有的请求进行过滤 。但缺点是一个过滤器实例只能在容器初始化时调用一次,来进行过滤操作,获得我们想要的数据 。
三者之间主要还是粒度的差异,应用场景的不同 。
过滤器(Filter) :采用filter过滤器,可以获取http、http请求和响应,但无法获取与spring框架相关的信息,如哪个control处理,哪个方法处理,有哪些参数,这些都是无法获取的 。
拦截器(Interceptor):采用interceptor拦截器,除了获取http、http请求和响应对象,还可以获取请求的类名、方法名,但拦截器无法获取请求参数的值 。
切片 (Aspect) : 切片 aspect 可以获取传入的参数值,但无法获取原始的http,http请求和响应对象 。

【springboot三种拦截器】


推荐阅读