Skip to content
On this page

ratelimit

这里的速率限制是对某个api而言,如果api不需要进行速率限制,建议不要添加

1. RateLimit说明

RateLimit有5个属性,

  • window 【窗口】在某个窗口内,这是一个时间段

  • maxRequests【窗口内的最大请求数量】和window一起使用

  • punishmentTime【惩罚时间】当超过了最大请求数,将自动封禁,封禁时间可以递增,当频繁触发最大请求时,将递增封禁时间。

  • minInterval【最短时间间隔】若两次的请间隔太短,不论是否超过最大请求数,都会封禁 默认0,0为不设置此值

  • checkType【检查的类型,可选值为IPUSER_ID

    • 当值为userId时,这个用户不论以何种ip访问,这些访问都会落到一个窗口内
    • 当值为IP时,同ip的请求会落到一个窗口内
    • 当窗口内的请求数达到阈值,便会触发封禁惩罚
  • associatedPatterns【惩罚时关联的API】

    1. 关联的api.当此api封禁时,该ip或者用户id在其他api同样封禁,支持*
    2. 如果需要选择模式,则加上前缀可多个,用空格隔开,方法类型 + 空格
    3. 当不加时默认为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() {
    ...
}

qq群: 115222346