近期一个老项目出现了接口幂等性 校验问题,前端加了按钮置灰,
依然被人拉着接口参数一顿输出,还是重复调用了接口,小陈及时赶到现场,通过复制粘贴,完成了后端接口幂等性调用校验。
以前写过一篇关于接口简单限流防止重复调用的,但是跟该篇还是不一样的,该篇的角度是接口和参数整体一致才当做重复。
简单限流:Springboot使用redis实现接口Api限流的实例
该篇内容:
实现接口调用的幂等性校验
方案 :自定义注解+redis+拦截器+MD5 实现
草图,意会(用户标识不是必要,看业务场景是针对个人还是只针对接口&参数):
话不多说,开始实战。
PS: 前排提醒,如果你还不知道怎么springboot整合redis,可以先去看下redis使用系列的 一、二。
SpringBoot中对应2.0.x版本的Redis配置详解
SpringBoot整合Redis之编写RedisConfig
正文自定义注解 怎么玩的 :
①标记哪个接口需要进行幂等性拦截
②每个接口可以要求幂等性范围时间不一样,举例:可以2秒内,可以3秒内,时间自己传
③ 一旦触发了,提示语可以不同 ,举例:VIP的接口,普通用户的接口,提示语不一样(开玩笑)
效果:
实战开始 核心三件套注解、拦截器、拦截器配置
① RepeatDaMie.java
②ApiRepeatInterceptor.java
③ WebConfig.java
工具类三件套①ContextUtil.java
②Md5Encrypt.java
③RedisUtils.java
REDIS配置类RedisConfig.java
最后写测试接口,看看效果(一个POST,一个GET):
故意把时间放大,1000秒内重复调用,符合我们拦截规则的都会被拦截。
TestController.java
PayOrderApply.java
redis生成了值:
到此这篇关于Springboot利用Redis实现接口幂等性拦截的文章就介绍到这了,更多相关Springboot接口幂等性拦截内容请搜索七叶笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持七叶笔记!