<导航

springboot过滤器/拦截器/AOP区别与执行顺序

 如果监听器、过滤器、 拦截器、 AOP都存在,则它们的执行顺序为:监听器 => 过滤器=> 拦截器=> AOP。

过滤器/拦截器/AOP

简介

  • 过滤器:Filter。拦截器:Interceptor 。
  • 在Spring构架的程序中,要优先使用拦截器。几乎所有 Filter 能够做的事情,interceptor 都能够轻松的实现。
  • AOP:可以自定义切入的点,有方法的参数,但拿不到http请求,可以通过RequestContextHolder等方式获得。

调用顺序

过滤前=> 拦截前=> AOP=> Controller=> AOP=> 拦截后=> 过滤后

 

 

 

 

不同点

过滤器 拦截器
使用场景 对请求/响应进行修改、判断等。一般用于过滤参数、登录权限验证、资源访问权限控制、敏感词汇过滤、字符编码转换。 在service或者一个方法前/后调用一个方法,或者在方法后调用一个方法。
能力

可以拿到原始的http请求与响应,拿不到请求的控制器和请求控制器中的方法的信息。

可以修改请求、响应、参数:比如:修改字符编码、删除低俗文字、删除危险字符、修改参数

可以拿到你请求的控制器和方法,却拿不到请求与响应。
顺序 可指定顺序。 可指定顺序。
实现方式 回调函数 AOP
使用范围 只能用于Web 可用于Web、Application、Swing
作用范围 所有请求。 只能是controller请求。静态资源无法控制。
使用位置 controller前后、dispaterServlet前后 controller前后
规范定义

Servlet 规范定义,Servlet 容器支持。

Filter 接口定义在 javax.servlet 包

Spring容器内,Spring框架支持。

HandlerInterceptor 接口 定义在org.springframework.web.servlet 包

灵活性/粒度

灵活性差(粒度大)。

不能够使用 Spring 容器资源

灵活性好(粒度小)。

能使用Spring里的任何资源、对象,例如 Service对象、数据源、事务管理等,通过IoC注入到拦截器即可。

打断链路 打断方法:处理请求和响应对象来引发中断,需要额外的动作,比如将用户重定向到错误页面。 打断方法:preHandle方法内返回 false
执行次数 一个controller周期只调用一次:一个过滤器实例只能在容器初始化时调用一次。 一个controller周期可调用多次

 

 

 

参考文章:

https://blog.csdn.net/feiying0canglang/article/details/121387483

posted @ 2022-04-14 16:30  奕锋博客  阅读(289)  评论(0编辑  收藏  举报