refactor(rate-limit): 限流升级为双层滑动窗口,新增 IP 全局限流与响应头
- 新增 IpRateLimitFilter:IP 维度全局滑动窗口限流,所有接口生效(默认 1000 次/60 秒) - RateLimitAspect 固定窗口升级为滑动窗口(Redis ZSET + Lua),与 IP 全局限流叠加 - 提取公共 SlidingWindowScript,统一 Lua 脚本 - 新增 X-RateLimit-Limit/Remaining/Reset 与 Retry-After 响应头 - RateLimitProperties 新增 ip 配置;新增 RateLimitException;dev 环境关闭 IP 限流
This commit is contained in:
@@ -15,11 +15,29 @@ import java.util.concurrent.TimeUnit;
|
||||
@Documented
|
||||
public @interface RateLimit {
|
||||
|
||||
/**
|
||||
* 窗口内允许的最大请求数。
|
||||
* <p>
|
||||
* {@code <=0} 时使用全局默认值 {@code rate-limit.default-limit}。
|
||||
*/
|
||||
int limit() default 0;
|
||||
|
||||
/**
|
||||
* 滑动窗口大小。
|
||||
* <p>
|
||||
* 单位由 {@link #timeUnit()} 决定;{@code <=0} 时使用全局默认值。
|
||||
*/
|
||||
int window() default 0;
|
||||
|
||||
/**
|
||||
* 窗口单位,默认秒。
|
||||
*/
|
||||
TimeUnit timeUnit() default TimeUnit.SECONDS;
|
||||
|
||||
String prefix() default "rate_limit:";
|
||||
/**
|
||||
* 限流 Key 的分组标签,用于区分不同接口。
|
||||
* <p>
|
||||
* 默认 {@code api}。
|
||||
*/
|
||||
String prefix() default "api";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user