ratelimit
这里的速率限制是对某个api而言,如果api不需要进行速率限制,建议不要添加
1. RateLimit说明
RateLimit有5个属性,
window 【窗口】在某个窗口内,这是一个时间段
maxRequests【窗口内的最大请求数量】和window一起使用
punishmentTime【惩罚时间】当超过了最大请求数,将自动封禁,封禁时间可以递增,当频繁触发最大请求时,将递增封禁时间。
minInterval【最短时间间隔】若两次的请间隔太短,不论是否超过最大请求数,都会封禁 默认0,0为不设置此值
checkType【检查的类型,可选值为IP和USER_ID】
- 当值为userId时,这个用户不论以何种ip访问,这些访问都会落到一个窗口内
- 当值为IP时,同ip的请求会落到一个窗口内
- 当窗口内的请求数达到阈值,便会触发封禁惩罚
associatedPatterns【惩罚时关联的API】
- 关联的api.当此api封禁时,该ip或者用户id在其他api同样封禁,支持*
- 如果需要选择模式,则加上前缀可多个,用空格隔开,方法类型 + 空格
- 当不加时默认为GET,全加可以用*代替 例子:
/api/login ---> GET POST ... /api/login
/api/log ---> GET /api/log
POST /api/login
POST GET /api/login
DELETE /api/delete
GET /api/* ---> /api下的全部封禁
2. 对ip进行限制
作用
同ip的请求会落到一个窗口内,当这个ip的访问频率如果超出指定限制,那么将会将这个ip给封禁
java
@RateLimit(maxRequests = 3, window = "10s", checkType = RateLimit.CheckType.IP,
punishmentTime = {"3s", "5s", "10s"})
@GetMapping("/limit-ip")
public Result limitIp() {
...
}
3. 对user进行限制
作用
同userId的请求会落到一个窗口内,当这个用户的访问频率如果超出指定限制,那么将会将这个用户给封禁
java
@RateLimit(maxRequests = 3, window = "10s", checkType = RateLimit.CheckType.USER_ID,
punishmentTime = {"3s", "5s", "10s"})
@GetMapping("/limit-user")
public Result limitUser() {
...
}