前因:1.使用IDEA快速构建springboot微服务项目,前往spring 官网下载maven或gradle项目 快速构建微服务。

  2.需要对访问的请求进行拦截、过滤处理,这时候就要配置拦截器,因为请求直接到达Controller层,所以需要对请求作处理。

如下:

1.请求的Controller层,这时候需要实现拦截器装置,如下:

(1)实现 HandlerInterceptor  ,重写 preHandle()方法,因为这个方法会在到达Controller之前处理达到拦截的作用,还有

postHandle(),
afterCompletion()这个是在所有请求结果过后处理的。
(2)还有,在实现拦截器HandlerInterceptor,类上一定要加注解@Component,@Configuration 为配置类,因为排除了@Controller,@Service,@Respository注解,
这是自定义的配置类。
(3)preHandle方法要返回true,否则请求不会被dispatcherServlet(控制器)处理,上面的ServletName就是dispatcherServlet(控制器的名称)

2.实现拦截器还是不够的,还需要手动注册

(1)实现 WebMvcConfigurer ,注意加上配置注解,

(2)addInterceptors()方法把拦截器放进去手动注册。

以上就可以实现拦截器功能。。。。。。😄😄

还有最重要的一点,就是流程问题:

从前台请求到达后台的请求顺序:Filter(过滤器)->Interceptor(拦截器)->Aspect(切面)->Controller(业务逻辑控制层)。

相反,从Controller抛出的异常处理顺序则是从内到外的。

拦截是AOP的一种实现策略。

不足:相比过滤器,拦截器能够知道用户发出的请求最终被哪个控制器处理,但是拦截器还有一个明显的不足,即不能够获取request的参数以及控制器

处理后的response.所以就有了切片的用武之地。

--来自知乎(springboot实现过滤器、拦截器与切片)这是真的大神。。。。。。。。