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的执行顺利

												

springMvc接口开发--对访问的restful api接口进行拦截实现功能扩展的更多相关文章

  1. 用 shell 脚本做 restful api 接口监控

    问题的提出 基于历史原因,公司有一个"三无"采集服务--无人员.无运维.无监控--有能力做的部门不想接.接了的部门没能力.于是就一直这样裸奔,直到前几天一个依赖于这个采集服务的大数 ...

  2. SpringMVC Restful api接口实现

    [前言] 面向资源的 Restful 风格的 api 接口本着简洁,资源,便于扩展,便于理解等等各项优势,在如今的系统服务中越来越受欢迎. .net平台有WebAPi项目是专门用来实现Restful ...

  3. Postman如何通过xmysql工具的Restful API 接口访问MySQL

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 导语 有时候用 Postman 接口测试需要获取MySQL的查询结果做接口输出的校验,这里介绍下 Postman 通过 R ...

  4. 整合swagger2生成Restful Api接口文档

    整合swagger2生成Restful Api接口文档 swagger Restful文档生成工具 2017-9-30 官方地址:https://swagger.io/docs/specificati ...

  5. Spring Boot入门系列(二十)快速打造Restful API 接口

    spring boot入门系列文章已经写到第二十篇,前面我们讲了spring boot的基础入门的内容,也介绍了spring boot 整合mybatis,整合redis.整合Thymeleaf 模板 ...

  6. Java 调用Restful API接口的几种方式--HTTPS

    摘要:最近有一个需求,为客户提供一些Restful API 接口,QA使用postman进行测试,但是postman的测试接口与java调用的相似但并不相同,于是想自己写一个程序去测试Restful ...

  7. 使用Flask设计带认证token的RESTful API接口

    大数据时代 Just a record. 使用Flask设计带认证token的RESTful API接口[翻译] 上一篇文章, 使用python的Flask实现一个RESTful API服务器端  简 ...

  8. Restful API 接口设计标准及规范

    Restful API 接口设计标准以及规范 RESTful概念 理解和评估以网络为基础的应用软件的架构设计,得到一个功能强.性能好.适宜通信的架构.REST指的是一组架构约束条件和原则." ...

  9. 基于Node和Electron开发了轻量版API接口请求调试工具——Post-Tool

    Electron 是一个使用 JavaScript.HTML 和 CSS 构建桌面应用程序的框架. 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 Java ...

随机推荐

  1. Python数据分析:pandas玩转Excel (一)

    目录 1 pandas简介 2 导入 3 使用 4 读取.写入 1 pandas简介 1.Pandas是什么? Pandas是一个强大的分析结构化数据的工具集: 它的使用基础是Numpy(提供高性能的 ...

  2. nginx 搭建图片服务器(windows 下,linux 下原理应该一样)

    作者的心声:很多知道的.用过的东西,不写下来,下次还要百度查询,浪费时间和精力,故本次写下学习笔记,方便下次查阅. 题外话:如有读者通过我这篇博客解决了工作上的难题,可以给个评论,让我一起分享你的喜悦 ...

  3. 使用python的socket模块进行网络编程

    使用socket编程可以分成基于tcp和基于udp,tcp和udp两者最主要的区别是有无面向连接. 基于tcp的socket流程:

  4. 关于同一密码使用generate_password_hash生成不同的密码散列值

    在python的 werkzeug.security 库中有两个函数generate_password_hash与check_password_hash用于对密码明文生成散列值以及检查密码是否与提供的 ...

  5. Web-从Java Request对象到HTTP协议

    https://mp.weixin.qq.com/s/PjcA22STEDGwRxVQweObQQ Java Web中的Request对象是哪里来的?Response对象的角色是什么? Java We ...

  6. (Java实现) 洛谷 P1028 数的计算

    题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数nn): 先输入一个自然数n(n≤1000),然后对此自然数按照如下方法进行处理: 不作任何处理; 在它的左边加上一个自然数,但该自然数不能 ...

  7. Java实现 LeetCode 433 最小基因变化

    433. 一条基因序列由一个带有8个字符的字符串表示,其中每个字符都属于 "A", "C", "G", "T"中的任意一 ...

  8. java实现第四届蓝桥杯猜年龄

    猜年龄 题目描述 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学.他曾在1935~1936年应邀来中国清华大学讲学. 一次,他参加某个重要会议,年轻的脸孔引人注目.于是有人询问他的年龄, ...

  9. 树莓派使用 OLED 屏显示图片及文字

    树莓派默认是不带显示屏的,如果想要查看系统的一些信息,需要使用电脑登录到树莓派,或者通过 HDMI 连接外接显示器查看.这样做总是有点麻烦,我们可以通过外接一个 OLED 屏来显示一些关键参数或者图片 ...

  10. opencl(2)平台、设备、上下文的获取与信息获取

    1:平台 1)获取平台id cl_int clGetPlatformIDs( cl_uint num_entries,      //想要获取的平台数 cl_platform_id * flatfor ...