API 接口防刷
顾名思义,想让某个接口某个人在某段时间内只能请求N次。
在项目中比较常见的问题也有,那就是连点按钮导致请求多次,以前在web端有表单重复提交,可以通过token 来解决。
除了上面的方法外,前后端配合的方法。现在全部由后端来控制。
原理
在你请求的时候,服务器通过redis 记录下你请求的次数,如果次数超过限制就不给访问。
在redis 保存的key 是有时效性的,过期就会删除。
代码实现:
为了让它看起来逼格高一点,所以以自定义注解的方式实现
@RequestLimit
注解
import java.lang.annotation.*; |
RequestLimitIntercept
拦截器
自定义一个拦截器,请求之前,进行请求次数校验
import com.alibaba.fastjson.JSONObject; |
拦截器写好了,但是还得添加注册
WebMvcConfig
配置类
因为我的是Springboot2.*
所以只需实现WebMvcConfigurer
如果是springboot1.*
那就继承自 WebMvcConfigurerAdapter
然后重写addInterceptors()
添加自定义拦截器即可。
4j |
Controller
控制层测试接口,
使用方式:
- 第一种:直接在类上使用注解
@RequestLimit(maxCount = 5,second = 1)
- 第二种:在方法上使用注解
@RequestLimit(maxCount = 5,second = 1)
maxCount 最大的请求数、second 代表时间,单位是秒
默认1秒内,每个接口只能请求一次
|
如果在类和方法上同时有@RequestLimit
注解 ,以方法上的参数为准,好像注释有点多了。
代码地址
完整的代码,如下地址