前因: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实现过滤器、拦截器与切片)这是真的大神。。。。。。。。
自古英雄出炼狱,从来富贵入凡尘。