拦截机制中Aspect、ControllerAdvice、Interceptor、Fliter之间的区别详解

 在项目的开发中,在某些情况下,我们需要对客户端发出的请求进行拦截,常用的API拦截方式有Fliter,Interceptor,ControllerAdvice以及Aspect。
拦截机制中Aspect、ControllerAdvice、Interceptor、Fliter之间的区别详解
 

上图是spring中的拦截机制,如果出现异常的话,异常的顺序是从里面到外面一步一步的进行处理,如果到了最外层都没有进行处理的话,就会由tomcat容器抛出异常。下面我将详细的解释这四个拦截方式的不同。因为只是演示就不是所有的使用了日志记录。这里相关的依赖自己可以去https://mvnrepository.com/下载,我就不一一添加了

先做一个总的总结吧

1.过滤器:Filter

:可以获得Http原始的请求和响应信息,但是拿不到响应方法的信息

2.拦截器:Interceptor

  :可以获得Http原始的请求和响应信息,也拿得到响应方法的信息,但是拿不到方法响应中参数的值

3.ControllerAdvice(Controller增强,自spring3.2的时候推出):

主要是用于全局的异常拦截和处理,这里的异常可以使自定义异常也可以是JDK里面的异常

用于处理当数据库事务业务和预期不同的时候抛出封装后的异常,进行数据库事务回滚,并将异常的显示给用户

4.切片:Aspect

   主要是进行公共方法的

  可以拿得到方法响应中参数的值,但是拿不到原始的Http请求和相对应响应的方法