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接口进行拦截实现功能扩展相关推荐

  1. 【掌握接口开发技巧 打造可靠的API接口】按关键字搜索商品

    作为一名程序员,在开发过程中经常需要开发API接口来实现数据的传输和交互等功能.本文将介绍程序员如何开发API接口,并提供一些实用的技巧. 第一步: 设计接口文档 在开发API之前,我们需要先设计接口 ...

  2. php 动态彩码辨色 接口的调用_好用的云函数!后端低代码接口开发,零基础编写API接口...

    前言 在开发项目过程中,经常需要用到API接口,实现对数据库的CURD等操作. 不管你是专业的PHP开发工程师,还是客户端开发工程师,或者是不懂编程但懂得数据库SQL查询,又或者是完全不太懂技术的人, ...

  3. 好用的云函数!后端低代码接口开发,零基础编写API接口

    前言 在开发项目过程中,经常需要用到API接口,实现对数据库的CURD等操作. 不管你是专业的PHP开发工程师,还是客户端开发工程师,或者是不懂编程但懂得数据库SQL查询,又或者是完全不太懂技术的人, ...

  4. SpringMVC Restful api接口实现

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

  5. Swagger 生成 PHP restful API 接口文档

    需求和背景 需求: 为客户端同事写接口文档的各位后端同学,已经在各种场合回忆了使用自动化文档工具前手写文档的血泪史. 我的故事却又不同,因为首先来说,我在公司是 Android 组负责人,属于上述血泪 ...

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

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

  7. 无需编程,基于甲骨文oracle数据库零代码生成CRUD增删改查RESTful API接口

    无需编程,基于甲骨文oracle数据库零代码生成CRUD增删改查RESTful API接口 回顾 通过之前一篇文章 无需编程,基于PostgreSQL零代码生成CRUD增删改查RESTful API接 ...

  8. RESTful API接口基本内容

    RESTful API接口基本内容 目录 RESTful API接口基本内容 一.RESTful是什么? 1.1.基本特点 1.2.设计概念和准则 1.3.http协议 二.RESTful与SOAP ...

  9. Restful API是什么?初探Restful API,传统接口写法与Restful API接口写法区别

    Restful API是什么?初探Restful API?为什么要用Restful API?传统接口写法与Restful API接口写法区别,带着这些问题我们来具体了解下Restful API: 目录 ...

最新文章

  1. java bank项目答案_Java基础实战Bank项目01-04
  2. 解决Outlook带有附件的邮件重复发送的问题
  3. 初识react中高阶组件
  4. MyBatis 缓存详解-什么时候开启二级缓存?
  5. 群签名和环签名的区别_环签名方案的研究
  6. 万亿安防市场前景可期 未来四大发展趋势分析
  7. CountdownLatchTest
  8. ping不同的网卡方法
  9. 文字转换为音频mp3的方法
  10. elvui显示服务器,魔兽世界怀旧服ElvUI插件
  11. Excel同时打开多个窗口
  12. 解决swiper动态改变数据后分页混乱问题
  13. 心流状态---人们做事时内心的一种状态
  14. NetSuite 未实现汇兑损益
  15. Java中浮点数取整数部分和小数部分
  16. 网站收录查询,常用的2种网站收录查询方法
  17. S5PV210 GPIO 操作
  18. keil的sct文件_(转)KEIL下分散加载文件 **.sct文件
  19. MTK平台如何确定Tuning的Scenario
  20. [渝粤教育] 西南科技大学 民事诉讼法学 在线考试复习资料

热门文章

  1. 暗影精灵2pro重装ubuntu16.04,实现ubuntu16.04和win10双系统并存。
  2. Mipi 接口 和 LVDS 接口区别
  3. MyEclipse启动报错The configuration area at is not writable
  4. 你问什么还没有好工作?
  5. 如何判断两个数互质?三个数两两互质?……N个数两两互质?(Java代码实现)
  6. 区块链商品溯源系统左侧导航栏+右侧加载页面ajax html
  7. 使用python的statsmodels模块拟合ARIMA模型
  8. 判断素数(质数)的四种方法
  9. Linux-动态监控进程
  10. Java Jpanel怎么刷新、更换、重写内容(repaint、removeAll、updata、updataUI)