mirror of
https://gitee.com/durcframework/SOP.git
synced 2025-08-11 21:57:56 +08:00
修复限流BUG
This commit is contained in:
@@ -3,6 +3,7 @@ package com.gitee.sop.gatewaycommon.manager;
|
||||
import com.gitee.sop.gatewaycommon.bean.ConfigLimitDto;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
@@ -39,22 +40,60 @@ public class DefaultLimitConfigManager implements LimitConfigManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* // 根据路由ID限流
|
||||
* routeId,
|
||||
* // 根据appKey限流
|
||||
* appKey,
|
||||
* // 根据路由ID + appKey限流
|
||||
* routeId + appKey,
|
||||
*
|
||||
* // 根据ip限流
|
||||
* ip,
|
||||
* // 根据ip+路由id限流
|
||||
* ip + routeId,
|
||||
* // 根据ip+appKey限流
|
||||
* ip + appKey,
|
||||
* // 根据ip+路由id+appKey限流
|
||||
* ip + routeId + appKey,
|
||||
* @param configLimitDto
|
||||
* @return
|
||||
*/
|
||||
protected Set<String> buildKeys(ConfigLimitDto configLimitDto) {
|
||||
Set<String> keys = new HashSet<>();
|
||||
String routeId = Optional.ofNullable(configLimitDto.getRouteId()).orElse("");
|
||||
String appKey = Optional.ofNullable(configLimitDto.getAppKey()).orElse("");
|
||||
String limitIp = Optional.ofNullable(configLimitDto.getLimitIp()).orElse("").replaceAll("\\s", "");
|
||||
|
||||
String baseKey = routeId.trim() + appKey.trim();
|
||||
keys.add(baseKey);
|
||||
|
||||
// 根据路由ID限流
|
||||
if (StringUtils.isNotBlank(routeId) && StringUtils.isBlank(appKey) && StringUtils.isBlank(limitIp)) {
|
||||
keys.add(routeId);
|
||||
}
|
||||
// 根据appKey限流
|
||||
if (StringUtils.isBlank(routeId) && StringUtils.isNotBlank(appKey) && StringUtils.isBlank(limitIp)) {
|
||||
keys.add(appKey);
|
||||
}
|
||||
// 根据路由ID + appKey限流
|
||||
if (StringUtils.isNotBlank(routeId) && StringUtils.isNotBlank(appKey) && StringUtils.isBlank(limitIp)) {
|
||||
keys.add(routeId.trim() + appKey.trim());
|
||||
}
|
||||
Set<String> baseKeys = new HashSet<>(keys);
|
||||
// 根据ip限流
|
||||
if (StringUtils.isBlank(routeId) && StringUtils.isBlank(appKey) && StringUtils.isNotBlank(limitIp)) {
|
||||
String[] ips = limitIp.split("\\,|\\,");
|
||||
keys.addAll(Arrays.asList(ips));
|
||||
}
|
||||
// 根据ip+路由id限流
|
||||
// 根据ip+appKey限流
|
||||
// 根据ip+路由id+appKey限流
|
||||
if (StringUtils.isNotBlank(limitIp)) {
|
||||
String[] ips = limitIp.split("\\,|\\,");
|
||||
for (String ip : ips) {
|
||||
keys.add(ip + baseKey);
|
||||
for (String baseKey : baseKeys) {
|
||||
keys.add(ip + baseKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return keys;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user