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的请求
/*** 配置拦截器* @author lance* @param registry*/public void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new UserSecurityInterceptor()).addPathPatterns("/user/**");} |
上面
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的执行顺利
转载于:https://www.cnblogs.com/kebibuluan/p/10703419.html
springMvc接口开发--对访问的restful api接口进行拦截实现功能扩展相关推荐
- 【掌握接口开发技巧 打造可靠的API接口】按关键字搜索商品
作为一名程序员,在开发过程中经常需要开发API接口来实现数据的传输和交互等功能.本文将介绍程序员如何开发API接口,并提供一些实用的技巧. 第一步: 设计接口文档 在开发API之前,我们需要先设计接口 ...
- php 动态彩码辨色 接口的调用_好用的云函数!后端低代码接口开发,零基础编写API接口...
前言 在开发项目过程中,经常需要用到API接口,实现对数据库的CURD等操作. 不管你是专业的PHP开发工程师,还是客户端开发工程师,或者是不懂编程但懂得数据库SQL查询,又或者是完全不太懂技术的人, ...
- 好用的云函数!后端低代码接口开发,零基础编写API接口
前言 在开发项目过程中,经常需要用到API接口,实现对数据库的CURD等操作. 不管你是专业的PHP开发工程师,还是客户端开发工程师,或者是不懂编程但懂得数据库SQL查询,又或者是完全不太懂技术的人, ...
- SpringMVC Restful api接口实现
[前言] 面向资源的 Restful 风格的 api 接口本着简洁,资源,便于扩展,便于理解等等各项优势,在如今的系统服务中越来越受欢迎. .net平台有WebAPi项目是专门用来实现Restful ...
- Swagger 生成 PHP restful API 接口文档
需求和背景 需求: 为客户端同事写接口文档的各位后端同学,已经在各种场合回忆了使用自动化文档工具前手写文档的血泪史. 我的故事却又不同,因为首先来说,我在公司是 Android 组负责人,属于上述血泪 ...
- 整合swagger2生成Restful Api接口文档
整合swagger2生成Restful Api接口文档 swagger Restful文档生成工具 2017-9-30 官方地址:https://swagger.io/docs/specificati ...
- 无需编程,基于甲骨文oracle数据库零代码生成CRUD增删改查RESTful API接口
无需编程,基于甲骨文oracle数据库零代码生成CRUD增删改查RESTful API接口 回顾 通过之前一篇文章 无需编程,基于PostgreSQL零代码生成CRUD增删改查RESTful API接 ...
- RESTful API接口基本内容
RESTful API接口基本内容 目录 RESTful API接口基本内容 一.RESTful是什么? 1.1.基本特点 1.2.设计概念和准则 1.3.http协议 二.RESTful与SOAP ...
- Restful API是什么?初探Restful API,传统接口写法与Restful API接口写法区别
Restful API是什么?初探Restful API?为什么要用Restful API?传统接口写法与Restful API接口写法区别,带着这些问题我们来具体了解下Restful API: 目录 ...
最新文章
- java bank项目答案_Java基础实战Bank项目01-04
- 解决Outlook带有附件的邮件重复发送的问题
- 初识react中高阶组件
- MyBatis 缓存详解-什么时候开启二级缓存?
- 群签名和环签名的区别_环签名方案的研究
- 万亿安防市场前景可期 未来四大发展趋势分析
- CountdownLatchTest
- ping不同的网卡方法
- 文字转换为音频mp3的方法
- elvui显示服务器,魔兽世界怀旧服ElvUI插件
- Excel同时打开多个窗口
- 解决swiper动态改变数据后分页混乱问题
- 心流状态---人们做事时内心的一种状态
- NetSuite 未实现汇兑损益
- Java中浮点数取整数部分和小数部分
- 网站收录查询,常用的2种网站收录查询方法
- S5PV210 GPIO 操作
- keil的sct文件_(转)KEIL下分散加载文件 **.sct文件
- MTK平台如何确定Tuning的Scenario
- [渝粤教育] 西南科技大学 民事诉讼法学 在线考试复习资料
热门文章
- 暗影精灵2pro重装ubuntu16.04,实现ubuntu16.04和win10双系统并存。
- Mipi 接口 和 LVDS 接口区别
- MyEclipse启动报错The configuration area at is not writable
- 你问什么还没有好工作?
- 如何判断两个数互质?三个数两两互质?……N个数两两互质?(Java代码实现)
- 区块链商品溯源系统左侧导航栏+右侧加载页面ajax html
- 使用python的statsmodels模块拟合ARIMA模型
- 判断素数(质数)的四种方法
- Linux-动态监控进程
- Java Jpanel怎么刷新、更换、重写内容(repaint、removeAll、updata、updataUI)