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 com.gitee.sop.gatewaycommon.bean.ConfigLimitDto;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
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) {
|
protected Set<String> buildKeys(ConfigLimitDto configLimitDto) {
|
||||||
Set<String> keys = new HashSet<>();
|
Set<String> keys = new HashSet<>();
|
||||||
String routeId = Optional.ofNullable(configLimitDto.getRouteId()).orElse("");
|
String routeId = Optional.ofNullable(configLimitDto.getRouteId()).orElse("");
|
||||||
String appKey = Optional.ofNullable(configLimitDto.getAppKey()).orElse("");
|
String appKey = Optional.ofNullable(configLimitDto.getAppKey()).orElse("");
|
||||||
String limitIp = Optional.ofNullable(configLimitDto.getLimitIp()).orElse("").replaceAll("\\s", "");
|
String limitIp = Optional.ofNullable(configLimitDto.getLimitIp()).orElse("").replaceAll("\\s", "");
|
||||||
|
|
||||||
String baseKey = routeId.trim() + appKey.trim();
|
// 根据路由ID限流
|
||||||
keys.add(baseKey);
|
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)) {
|
if (StringUtils.isNotBlank(limitIp)) {
|
||||||
String[] ips = limitIp.split("\\,|\\,");
|
String[] ips = limitIp.split("\\,|\\,");
|
||||||
for (String ip : ips) {
|
for (String ip : ips) {
|
||||||
keys.add(ip + baseKey);
|
for (String baseKey : baseKeys) {
|
||||||
|
keys.add(ip + baseKey);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return keys;
|
return keys;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user