拦截器的特性

  • 拦截器可以拦截controller请求
  • 拦截器可以中断请求轨迹
  • 请求之前如果该请求配置了拦截器,则请求会先经过拦截器,拦截器放行之后执行请求的controller,controller执行完成之后会回到拦截器继续执行拦截器中的代码

拦截器开发

1、编写拦截器类,实现 HandlerInterceptor 接口

preHandler   预先处理方法  最先执行方法  返回值:布尔类型  true 放行请求  false 中断
postHandler  过程中处理: controller返回之后回到posthandler这个方法执行,执行完成这个方法开始响应浏览器
afterCompletion   最后完成:响应结束之后会执行拦截器中的这个方法

下面我写了两个拦截器

package com.peko.interceptor.interceptor;import com.peko.interceptor.controller.MyController;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.lang.Nullable;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** @author Peko*/
public class MyInterceptor1 implements HandlerInterceptor {private static final Logger logger = LoggerFactory.getLogger(MyController.class);/**** @param request* @param response* @param handler 当前请求的控制器的方法对象* @return* @throws Exception*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {logger.info("=========1========");//true 放行 false 中断return true;}/**** @param request* @param response* @param handler  当前请求的控制器的方法对象* @param modelAndView   模型和视图  当前请求访问方法的modelandview* @throws Exception*/@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {logger.info("=========2========");}/*** 这个方法相当于 finally{}代码块,即无论请求是否有问题都会执行* @param request* @param response* @param handler  当前请求的控制器的方法对象* @param ex  如果控制器出现异常时异常对象* @throws Exception*/@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {logger.info("=========3========");}
}
package com.peko.interceptor.interceptor;import com.peko.interceptor.controller.MyController;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.lang.Nullable;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** @author Peko*/
public class MyInterceptor2 implements HandlerInterceptor {private static final Logger logger = LoggerFactory.getLogger(MyController.class);/**** @param request* @param response* @param handler 当前请求的控制器的方法对象* @return* @throws Exception*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {logger.info("=========4========");//true 放行 false 中断return true;}/**** @param request* @param response* @param handler  当前请求的控制器的方法对象* @param modelAndView   模型和视图  当前请求访问方法的modelandview* @throws Exception*/@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {logger.info("=========5========");}/*** 这个方法相当于 finally{}代码块,即无论请求是否有问题都会执行* @param request* @param response* @param handler  当前请求的控制器的方法对象* @param ex  如果控制器出现异常时异常对象* @throws Exception*/@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {logger.info("=========6========");}
}

2、配置拦截器,实现 WebMvcConfigurer接口

类 implements WebMvcConfigurer{//覆盖配置拦截器方法1.使用哪个拦截器2.拦截器拦截请求3.排除哪些请求}
package com.peko.interceptor.config;import com.peko.interceptor.interceptor.MyInterceptor1;
import com.peko.interceptor.interceptor.MyInterceptor2;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;/*** @author Peko*/
@Configuration
public class MvcConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new MyInterceptor1()) //指定拦截器.addPathPatterns("/**")  //拦截所有.order(1);  //指定拦截器执行顺序registry.addInterceptor(new MyInterceptor2()) //指定拦截器.addPathPatterns("/**")  //拦截所有.order(2);  //指定拦截器执行顺序}
}

3、Controller

package com.peko.interceptor.controller;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @author Peko*/
@RestController
@RequestMapping("demo")
public class MyController {private static final Logger logger = LoggerFactory.getLogger(MyController.class);@RequestMapping("demo")public String demo(){logger.info("OK!11");return "OK!";}
}

4、运行项目,访问 http://localhost:8082/demo/demo,打印日志

2021-10-08 17:46:49.782  INFO 6796 --- [nio-8082-exec-4] c.p.interceptor.controller.MyController  : =========1========
2021-10-08 17:46:49.782  INFO 6796 --- [nio-8082-exec-4] c.p.interceptor.controller.MyController  : =========4========
2021-10-08 17:46:49.782  INFO 6796 --- [nio-8082-exec-4] c.p.interceptor.controller.MyController  : OK!11
2021-10-08 17:46:49.783  INFO 6796 --- [nio-8082-exec-4] c.p.interceptor.controller.MyController  : =========5========
2021-10-08 17:46:49.784  INFO 6796 --- [nio-8082-exec-4] c.p.interceptor.controller.MyController  : =========2========
2021-10-08 17:46:49.784  INFO 6796 --- [nio-8082-exec-4] c.p.interceptor.controller.MyController  : =========6========
2021-10-08 17:46:49.784  INFO 6796 --- [nio-8082-exec-4] c.p.interceptor.controller.MyController  : =========3========

多个拦截器的执行顺序

当配置了多个拦截器时,多个拦截器会以栈的方式执行
例如:现在配置了两个拦截器 1-preHandle1、2-postHandle1、3-afterCompletion1  4-preHandle2、5-postHandle2、6-afterCompletion2
则执行顺序威:   1 4 5 2 6 3

gitee项目地址:https://gitee.com/ShyHour/interceptor

【SpringBoot】十八、拦截器 interceptor相关推荐

  1. springboot中的拦截器interceptor和过滤器filter,多次获取request参数

    大家好,我是烤鸭:     这是一篇关于springboot的拦截器(interceptor)和过滤器(Filter). 先说一下过滤器和拦截器. 区别: 1. servlet请求,顺序:Filter ...

  2. (十六)ATP应用测试平台——java应用中的过滤器Filter、拦截器Interceptor、参数解析器Resolver、Aop切面,你会了吗?

    前言 过滤器Filter.拦截器Interceptor.参数解析器Resolver.Aop切面是我们应用开发中经常使用到的技术,到底该如何使用这些web附属功能, 本小节我们就分别介绍一下其各自的用法 ...

  3. Resultful API的拦截(拦截器——Interceptor)

    目录 一.Resultful API的拦截三种方式 二.拦截器(Interceptor)的演示示例(springboot项目) 三.Interceptor拦截器特点 四.Filter过滤器.Inter ...

  4. springboot 自定义注解拦截器

    springboot 自定义注解拦截器 最近在工作中,发现自定义注解拦截使用起来特别方便,现在来写出来给大家看看 环境springboot 首先写一个自定义注解 package com.study.c ...

  5. SpringBoot中配置拦截器时,跨域失效

    SpringBoot中配置拦截器时,跨域失效 前后段分离的项目,配置了跨域后,访问正常,但是配置了拦截器以后,有的访问正常,有的出现跨域问题,发现出现跨域问题的都是拦截器里面没有放行的请求. @Con ...

  6. 从零开始SpringCloud Alibaba实战(59)——过滤器filter、拦截器interceptor、和AOP的区别与联系及应用

    文章目录 前言 过滤器 拦截器 过滤器与拦截器的区别 AOP(面向切面) 三者使用场景 Filter过滤器 Interceptor拦截器 Spring AOP拦截器 Filter与Intercepto ...

  7. OKHttp拦截器(Interceptor)

    一.拦截器一般作用 <1> URL重定向. <2> 请求体数据加密. <3> HEAD动态添加. <4> 请求日志抓取. 二.基础讲解 <1> ...

  8. spring过滤器Filter 、 拦截器Interceptor 、 切片Aspect 详解

    springboot 过滤器Filter vs 拦截器Interceptor vs 切片Aspect 详解 1 前言 最近接触到了过滤器和拦截器,网上查了查资料,这里记录一下,这篇文章就来仔细剖析下过 ...

  9. Flume-NG源码阅读之SourceRunner,及选择器selector和拦截器interceptor的执行

    在AbstractConfigurationProvider类中loadSources方法会将所有的source进行封装成SourceRunner放到了Map<String, SourceRun ...

  10. Struts2拦截器(Interceptor)原理详解

    1.    理解拦截器 1.1.    什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作 ...

最新文章

  1. mysql中有哪些数值型函数_mysql数值型函数汇总
  2. 实现俄罗斯方块遇到的问题及游戏下载
  3. 再降64%,3.5M超轻量中英文OCR模型开源,身量缩减效果提升v4.1
  4. 【RK3399Pro学习笔记】十六、ROS中的常用可视化工具
  5. demo_ajax_json.js,ajax小demo-----ajax中json的使用
  6. oracle连续状态相同,数据库共有三种状态:quiesce、resrict、suspend
  7. HTML5手机游戏将迎美好未来 .
  8. 小牛uqi几个版本区别_川崎ZX25R便宜版本长这样?
  9. Swagger2+Apizza接口文档
  10. CSS世界Bug般的存在——字母x与“居中”
  11. [Android] 百度地图API Android相关配置教程(包含获取包名、发布版SHA1和开发版SHA1)
  12. python爬虫登录微博_[突如其来]python爬虫模拟登录微博
  13. NXP KV10 FTM fault功能的配置
  14. 弘辽科技:淘宝新店扶持是人人享有的权益吗?
  15. 微信小程序map组件点聚合初次使用的坑
  16. c语言组播源码_CLAA Class C简单组播业务的实现
  17. JavaScript实现手机震动效果
  18. 入行数据分析要知道什么是统计
  19. 数据大屏可视化-highcharts-3D实心饼图
  20. 【微信小程序】版本更新提示

热门文章

  1. matlab三维点云去除背景,一种点云处理三维重建方法与流程
  2. JAVA算法:解救小哈(JAVA版)
  3. 在虚拟机里安装windows
  4. Computer-System Structures八大思想
  5. 青龙面板+傻妞sillyGirl+阿东自动登录全套保姆级一步到位教程(2021-10-09)
  6. 特斯拉神器TeslaMate一键安装,终于来了
  7. AI未来是什么样子,这些科幻电影里已经有了答案
  8. js相册图片抖动放大展示效果
  9. 【基础练习】codevs1506 传话题解
  10. envoy做集中式egress sidecar