refactor all
This commit is contained in:
@@ -23,19 +23,21 @@ import org.springframework.stereotype.Component;
|
||||
@Component
|
||||
public class RequestRateLimitInterceptor extends RequestRateLimitAbstractInterceptor {
|
||||
|
||||
private static final String KEY_PREFIX = "REQUEST:RATE_LIMIT:";
|
||||
|
||||
@Autowired
|
||||
@Qualifier("redisRateLimit")
|
||||
private Redis<String, Integer> redisRequestRateLimit;
|
||||
private Redis<String, Integer> redis;
|
||||
|
||||
@Override
|
||||
public boolean beforeRun(HttpServletRequest req, HttpServletResponse resp, String id, int cycle, int limit) {
|
||||
// 键
|
||||
String key = "TimiServerAPI." + TimiSpring.getRequestIP() + "." + id;
|
||||
if (redisRequestRateLimit.has(key)) {
|
||||
Integer count = redisRequestRateLimit.get(key);
|
||||
String key = getKey(id);
|
||||
if (redis.has(key)) {
|
||||
Integer count = redis.get(key);
|
||||
if (count != null) {
|
||||
if (count < limit) {
|
||||
redisRequestRateLimit.setAndKeepTTL(key, ++count);
|
||||
redis.setAndKeepTTL(key, ++count);
|
||||
} else {
|
||||
log.warn("请求频率过高:[" + key + "].C" + count + "L" + limit);
|
||||
throw new TimiException(TimiCode.REQUEST_BAD).msgKey("request_rate_limit");
|
||||
@@ -43,7 +45,11 @@ public class RequestRateLimitInterceptor extends RequestRateLimitAbstractInterce
|
||||
}
|
||||
return true;
|
||||
}
|
||||
redisRequestRateLimit.set(key, 0, Time.S * cycle);
|
||||
redis.set(key, 0, Time.S * cycle);
|
||||
return true;
|
||||
}
|
||||
|
||||
private String getKey(String id) {
|
||||
return "%sTIMISERVERAPI:%s:%s".formatted(KEY_PREFIX, TimiSpring.getRequestIP(), id);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user