springMvc接口开发--对访问的restful api接口进行拦截实现功能扩展
1、视频参加Spring Security开发安全的REST服务\PART1\PART1 3-7 使用切片拦截REST服务三通it学院-www.santongit.com-.mp4
讲的比较的经典,后面我也会通过案例来对代码进行分析

restful api的拦截主要有下面的三个部分,我们一一对这个三个部分进行讲解
1.第一时间filter过滤器要记录处理每个请求服务的时间

在springboot中没有web.xml配置文件,那如何把一个filter添加到springboot中了

我们编写一个配置类,注册一个FilterRegisterrationBean,把我们的filter注册进去,指定我们filter过来的url
启动成功之后,日志信息为

filter最大的问题参数中只能得到request对象,reponse对象,获得其中的参数
如果要获得当前的restful api是那个springmvc的control和方法做处理,filter是无法完成的
我们可以使用springmvc框架的拦截器来实现这个功能

springmvc的拦截器需要实现HandlerInterceptor接口
有三个方法
preHandle postHandler afterCompletion
prehandle在实际调用的control中的方法被执行之前,会先执行preHandle,prehandler方法的返回值必须是true,后续的control中实际调用的方法和postHandler方法才能执行,这里需要特别注意下

control中的方法被执行完成之后会调用postHandle方法,如果control中的方法被执行过程中出现了异常就不会执行postHandler方法
afterCompletion不管ontrol中的方法被执行过程中是否出现了异常,都会被调用
try{
preHandle()
control中的方法被执行()
postHandler ()
}catch(Exception e){
}finally{
afterCompletion()
}


上面中参数handler可以得到当前restapi要访问的那个control以及对于control对应的方法

接下来我们要把拦截器添加到springboot中如何实现了
第一步:我们自定义的拦截器使用@compent添加到spring 容器中

其中自定义一个配置类,该类需要继承webMvcConfigurerAdapter,然后将我们自定义的拦截器注册到interceptorRegistry中,就满足条件了
接下来我们来看下日志的打印

通过拦截器:首先我们可以通过拦截器的Object handler参数知道当前api 访问那个control类已经方法,拦截器和过滤器一样可以设置拦截那些url的请求
/** |
上面
addPathPatterns就是制定拦截器拦截的url 使用拦截器可以得到request对象,response对象以及Object handler对象,handler对象可以得到当前调用方法的方法名

使用拦截器我们可以得到getInfo这个调用方法的名字,但是在拦截器的preHandle方法中我们是无法得到getInfo方法中传入的参数id,要得到传入参数的id。我们必须使用aop,这也是我们讲解的重点

springboot使用aop需要加入aop的依赖

接下来我们写一个切片

定义了一个aspect切片类,采用@Around环绕方式
在参数ProceedingJoinPoint中我们可以得到执行方法的参数

我们来看下日志的打印
过滤器 拦截器 aspect的执行顺序如下


先执行过滤器,所以先打印了time filter start,再执行拦截器,所以打印了prehandle 接下来执行aspect切面打印 time aspect start
接下来才真正执行method的方法,打印进入getInfo服务,方法执行完成之后,一层一层的向上回去,回去首先执行acpect 打印 time aspectend,
然后回退到拦截器,首先执行拦截器的postHandler方法,再执行afterHandler方法,最后在执行过滤器的退出方法,打印timefilterend 不清楚的看上面的图,一定要了解,过滤器 拦截器 以及aspect的执行顺利

springMvc接口开发--对访问的restful api接口进行拦截实现功能扩展的更多相关文章
- 用 shell 脚本做 restful api 接口监控
问题的提出 基于历史原因,公司有一个"三无"采集服务--无人员.无运维.无监控--有能力做的部门不想接.接了的部门没能力.于是就一直这样裸奔,直到前几天一个依赖于这个采集服务的大数 ...
- SpringMVC Restful api接口实现
[前言] 面向资源的 Restful 风格的 api 接口本着简洁,资源,便于扩展,便于理解等等各项优势,在如今的系统服务中越来越受欢迎. .net平台有WebAPi项目是专门用来实现Restful ...
- Postman如何通过xmysql工具的Restful API 接口访问MySQL
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 导语 有时候用 Postman 接口测试需要获取MySQL的查询结果做接口输出的校验,这里介绍下 Postman 通过 R ...
- 整合swagger2生成Restful Api接口文档
整合swagger2生成Restful Api接口文档 swagger Restful文档生成工具 2017-9-30 官方地址:https://swagger.io/docs/specificati ...
- Spring Boot入门系列(二十)快速打造Restful API 接口
spring boot入门系列文章已经写到第二十篇,前面我们讲了spring boot的基础入门的内容,也介绍了spring boot 整合mybatis,整合redis.整合Thymeleaf 模板 ...
- Java 调用Restful API接口的几种方式--HTTPS
摘要:最近有一个需求,为客户提供一些Restful API 接口,QA使用postman进行测试,但是postman的测试接口与java调用的相似但并不相同,于是想自己写一个程序去测试Restful ...
- 使用Flask设计带认证token的RESTful API接口
大数据时代 Just a record. 使用Flask设计带认证token的RESTful API接口[翻译] 上一篇文章, 使用python的Flask实现一个RESTful API服务器端 简 ...
- Restful API 接口设计标准及规范
Restful API 接口设计标准以及规范 RESTful概念 理解和评估以网络为基础的应用软件的架构设计,得到一个功能强.性能好.适宜通信的架构.REST指的是一组架构约束条件和原则." ...
- 基于Node和Electron开发了轻量版API接口请求调试工具——Post-Tool
Electron 是一个使用 JavaScript.HTML 和 CSS 构建桌面应用程序的框架. 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 Java ...
随机推荐
- Java中的集合(七)双列集合顶层接口------Map接口架构
Java中的集合(七)双列集合顶层接口------Map接口 一.Map接口的简介 通过List接口,我们知道List接口下的集合是单列集合,数据存储是单列的结构.Map接口下是一个键值对(key-v ...
- java继承会犯的小错误
注意事项:阅读本文前应该先了解java的继承.本文定位为已经继承基础知识. 一:试图覆盖私有方法 先上代码 public class Father { private void print() { S ...
- Java实现桐桐的数学难题
桐桐的数学难题 题目描述 今天数学课上,桐桐学习了质数的知识:一个正整数如果只能被1和它本身整除,那么这个整数便是质数.桐桐就想:任意一个正整数是否都能分解成若干个质数相乘的形式呢?输入一个正整数n( ...
- Java实现 蓝桥杯VIP 算法提高 彩票
算法提高 彩票 时间限制:1.0s 内存限制:256.0MB 问题描述 为丰富男生节活动,贵系女生设置彩票抽奖环节,规则如下: 1.每张彩票上印有7个各不相同的号码,且这些号码的取值范围为[1, 33 ...
- Java实现 蓝桥杯VIP 算法提高 不同单词个数统计
算法提高 不同单词个数统计 时间限制:1.0s 内存限制:512.0MB 问题描述 编写一个程序,输入一个句子,然后统计出这个句子当中不同的单词个数.例如:对于句子"one little t ...
- Java实现 LeetCode 75 颜色分类
75. 颜色分类 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红 ...
- Java实现 蓝桥杯 算法提高 Monday-Saturday质因子
试题 算法提高 Monday-Saturday质因子 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 这个问题是个简单的与数论有关的题目,看起来似乎是"求正整数的所有质因子 ...
- PAT 挖掘机技术哪家强
为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第 1 行给出不超过 105 的正整数 N,即参赛人数.随后 N ...
- 【asp.net core 系列】4. 更高更强的路由
0. 前言 在之前我们介绍了请求通过路由寻找到控制器,以及控制器与视图的数据流转.那么,我们回过头来,再看看路由的一些其他用法. 1. 路由属性(Route Attribute) 按照英文的直接翻译, ...
- 三分钟搭建websocket实时在线聊天,项目经理也不敢这么写
我们先看一下下面这张图: 可以看到这是一个简易的聊天室,两个窗口的消息是实时发送与接收的,这个主要就是用我们今天要讲的websocket实现的. websocket是什么? websocket是一种网 ...