Skip to content

Commit c8fb60e

Browse files
authored
Merge branch 'master' into dev-shenyu-spring-boot-starter
2 parents ac37229 + b26dda6 commit c8fb60e

File tree

1 file changed

+27
-0
lines changed
  • shenyu-plugin/shenyu-plugin-fault-tolerance/shenyu-plugin-ratelimiter/src/main/java/org/apache/shenyu/plugin/ratelimiter/resolver

1 file changed

+27
-0
lines changed

shenyu-plugin/shenyu-plugin-fault-tolerance/shenyu-plugin-ratelimiter/src/main/java/org/apache/shenyu/plugin/ratelimiter/resolver/RemoteAddrKeyResolver.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
package org.apache.shenyu.plugin.ratelimiter.resolver;
1919

20+
import org.apache.commons.lang3.StringUtils;
2021
import org.apache.shenyu.spi.Join;
2122
import org.springframework.web.server.ServerWebExchange;
2223

@@ -25,13 +26,39 @@
2526
@Join
2627
public class RemoteAddrKeyResolver implements RateLimiterKeyResolver {
2728

29+
private static final String[] HEADERS = {"X-Forwarded-For", "X-Real-IP", "Proxy-Client-IP", "WL-Proxy-Client-IP", "HTTP_CLIENT_IP", "HTTP_X_FORWARDED_FOR"};
30+
31+
private static final String UNKNOWN = "unknown";
32+
2833
@Override
2934
public String getKeyResolverName() {
3035
return "REMOTE_ADDRESS_KEY_RESOLVER";
3136
}
3237

3338
@Override
3439
public String resolve(final ServerWebExchange exchange) {
40+
String ip;
41+
for (String header : HEADERS) {
42+
ip = exchange.getRequest().getHeaders().getFirst(header);
43+
boolean isUnknown = StringUtils.isBlank(ip) || UNKNOWN.equalsIgnoreCase(ip);
44+
if (!isUnknown) {
45+
if (StringUtils.indexOf(ip, ',') > 0) {
46+
String[] split = StringUtils.split(ip, ',');
47+
for (int i = 0; i < split.length; i++) {
48+
split[i] = split[i].trim();
49+
}
50+
for (String subIp : split) {
51+
boolean isUnknownSubIp = StringUtils.isBlank(subIp) || UNKNOWN.equalsIgnoreCase(subIp);
52+
if (!isUnknownSubIp) {
53+
ip = subIp;
54+
break;
55+
}
56+
}
57+
}
58+
return ip;
59+
}
60+
}
3561
return Objects.requireNonNull(exchange.getRequest().getRemoteAddress()).getAddress().getHostAddress();
3662
}
63+
3764
}

0 commit comments

Comments
 (0)