本文主要介绍一种通过实现自定义注解,实现一种比较通用的接口防刷方式
前言
1.基本准备
- jdk 8
- redis
- springboot 2.7.6
2.基本思路
主要就是借助 redis 来实现接口的防刷。
基本逻辑:定义一个切面,通过@Prevent注解作为切入点、在该切面的前置通知获取该方法的所有入参;
同时,通过@Prevent注解的convert属性,自定义redis的部分key值,并将其Base64编码+完整方法名作为redis的key,
自定义redis的部分key值作为reids的value,@Prevent的time作为redis的expire,存入redis;
每次进来这个切面根据自定义入参Base64编码+完整方法名判断redis值是否存在,存在则拦截防刷,不存在则允许调用;
本文主要介绍一种通过实现自定义注解,实现一种比较通用的接口防刷方式
前言
1.基本准备
- jdk 8
- redis
- springboot 2.7.6
2.基本思路
主要就是借助 redis 来实现接口的防刷。
基本逻辑:定义一个切面,通过@Prevent注解作为切入点、在该切面的前置通知获取该方法的所有入参;
同时,通过@Prevent注解的convert属性,自定义redis的部分key值,并将其Base64编码+完整方法名作为redis的key,
自定义redis的部分key值作为reids的value,@Prevent的time作为redis的expire,存入redis;
每次进来这个切面根据自定义入参Base64编码+完整方法名判断redis值是否存在,存在则拦截防刷,不存在则允许调用;
代码实现
1.定义注解Prevent
1 | package com.terrytian.springboottq.annotation; |
2. 实现PreventAop
1 | package com.terrytian.springboottq.aop; |
3.自定义转换器
这一步也是必须的,通过实现 PreventConvert 来自定义 redis的key值。
3.1 PreventConvert 转换器基类
1 | package com.terrytian.springboottq.convert; |
3.2 自定义转换器deno
1 | package com.terrytian.springboottq.convert; |
4.自定义处理策略
4.1 处理策略基类 PreventHandler
1 | package com.terrytian.springboottq.handler; |
4.2 处理策略demo
1 | package com.terrytian.springboottq.handler; |
5.使用
1 | package com.terrytian.springboottq.modules.controller; |
其它
- 以上内容仅展示了主要的代码,详细代码可以参照码云详细代码
- 参考文章:https://mp.weixin.qq.com/s?__biz=MzI4OTA3NDQ0Nw==&mid=2455552542&idx=1&sn=cfd65bc5610d8f4506cfc4e25ce5a4ba&chksm=fb9cde7ecceb57687de69a6414ae45ffa3006c146c44bdaed1075ff790e3fd1f6b3da540d77f&scene=126&sessionid=1669361726&subscene=236&key=eb6afd4c0788b4ae1bec69889c3675a9c909d791dd91c7aea1bca5db905d14b005873f62adc602dca3d1f42fc9a9ce2fd6cbae15c84ddba06e26b9fb257bd9e1d287f5e7f8432149b11835d103f7655fe17d9d7d7a22ac00dc288dad12cc3e4473159542db81de4805fc192624720de0f0296198357b5b523b97cec7eaf0fe0e&ascene=7&uin=MTkwMjM4NTUyMQ%3D%3D&devicetype=Windows+11+x64&version=63080029&lang=zh_CN&exportkey=n_ChQIAhIQse2DFnVt2WFETfbeQPG%2BGhLfAQIE97dBBAEAAAAAAMBOEaFVQsIAAAAOpnltbLcz9gKNyK89dVj0aZo1Z%2FBN2Nc3264NaztR3BzDphn0is1jmGojNoZAC6E5b9CiRHW%2BYYjsR%2F4CLEUivXzwpStR5MPEmjqrBjvbfnWZxvtiPXXgLICj0nyR0yEwMZAXBXfnYwM9zW4ujIUtvw%2F54o3WMc04xUkLf6cNjN9zY6xU7g7PmP%2BRS3%2FLpLFKfiz3fkitwJouky0uxKpK431HRzh%2BDoXAbuCjiKaBwLVugXYOvnAVbbsExGsxCjcWSmrSJrlSDB0%3D&acctmode=0&pass_ticket=eEPrLIvI8n6%2FpN7Iz%2BPntiRof9Kl0NjiRwpdaQxLOJ2NPVI51S5YmSeJwtHSbwwN&wx_header=1&fontgear=2
GitHub IssuesGitHub Discussions