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:
Ray.Hao
2026-07-12 21:23:17 +08:00
parent 2441efa9ba
commit 13ed4503ed
12 changed files with 78 additions and 20 deletions

View File

@@ -11,12 +11,12 @@ public interface RedisConstants {
/**
* 限流相关键
*/
interface RateLimiter {
/** 接口级限流 Key示例login:rate_limit:token:/api/v1/auth/login */
String API = "{}rate_limit:{}:{}";
interface RateLimit {
/** 接口级限流 Key示例rate_limit:api:{user}:{uri} */
String API = "rate_limit:{}:{}:{}";
/** IP 全局限流 Key示例rate_limiter:ip:192.168.1.100 */
String IP = "rate_limiter:ip:{}";
/** IP 全局限流 Key示例rate_limit:ip:192.168.1.100 */
String IP = "rate_limit:ip:{}";
}
/**