Skip to content

Commit f31df6b

Browse files
Resolves the remote ip when behind proxy; fixes gh-1683
1 parent 34133f7 commit f31df6b

File tree

3 files changed

+31
-1
lines changed
  • spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web
  • tests
    • spring-cloud-sleuth-instrumentation-feign-tests/src/test/java/org/springframework/cloud/sleuth/instrument/feign/issues/issue502
    • spring-cloud-sleuth-instrumentation-webflux-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web

3 files changed

+31
-1
lines changed

spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceWebFilter.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,14 @@ public ServerHttpRequest unwrap() {
330330

331331
@Override
332332
public boolean parseClientIpAndPort(Span span) {
333+
boolean clientIpAndPortParsed = super.parseClientIpAndPort(span);
334+
if (clientIpAndPortParsed) {
335+
return true;
336+
}
337+
return resolveFromInetAddress(span);
338+
}
339+
340+
private boolean resolveFromInetAddress(Span span) {
333341
InetSocketAddress addr = delegate.getRemoteAddress();
334342
if (addr == null) {
335343
return false;

tests/spring-cloud-sleuth-instrumentation-feign-tests/src/test/java/org/springframework/cloud/sleuth/instrument/feign/issues/issue502/Issue502Tests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public void should_reuse_custom_feign_client() {
8282
then(response).isEqualTo("foo");
8383
// retries
8484
then(this.spans).hasSize(1);
85-
//then(this.spans.get(0).tags().get("http.path")).isEqualTo("");
85+
// then(this.spans.get(0).tags().get("http.path")).isEqualTo("");
8686
}
8787

8888
}

tests/spring-cloud-sleuth-instrumentation-webflux-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceWebFluxTests.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,11 @@ public void should_instrument_web_filter() throws Exception {
9393
// then
9494
thenNoSpanWasReported(spans, skippedPatternResponse, controller2);
9595

96+
// when (issue #1683)
97+
response = whenRequestWithXForwardedForIsSent(port, "/api/fn/20");
98+
// then
99+
thenSpanWasReportedWithRemoteIpTags(spans, response);
100+
96101
// cleanup
97102
context.close();
98103
}
@@ -110,6 +115,15 @@ private void thenSpanWasReportedWithTags(TestSpanHandler spans,
110115
then(spans.get(0).name()).isEqualTo("GET /api/c2/{id}");
111116
then(spans.get(0).tags()).containsEntry("mvc.controller.method", "successful")
112117
.containsEntry("mvc.controller.class", "Controller2");
118+
then(spans.get(0).remoteIp()).isEqualTo("127.0.0.1");
119+
}
120+
121+
private void thenSpanWasReportedWithRemoteIpTags(TestSpanHandler spans,
122+
ClientResponse response) {
123+
Awaitility.await()
124+
.untilAsserted(() -> then(response.statusCode().value()).isEqualTo(200));
125+
then(spans).hasSize(1);
126+
then(spans.get(0).remoteIp()).isEqualTo("203.0.113.195");
113127
}
114128

115129
private void thenFunctionalSpanWasReportedWithTags(TestSpanHandler spans,
@@ -138,6 +152,14 @@ private ClientResponse whenRequestIsSent(int port, String path) {
138152
return exchange.block();
139153
}
140154

155+
private ClientResponse whenRequestWithXForwardedForIsSent(int port, String path) {
156+
Mono<ClientResponse> exchange = WebClient.create().get()
157+
.uri("http://localhost:" + port + path)
158+
.header("X-Forwarded-For", "203.0.113.195, 70.41.3.18, 150.172.238.178")
159+
.exchange();
160+
return exchange.block();
161+
}
162+
141163
private ClientResponse whenRequestIsSentToSkippedPattern(int port) {
142164
Mono<ClientResponse> exchange = WebClient.create().get()
143165
.uri("http://localhost:" + port + "/skipped").exchange();

0 commit comments

Comments
 (0)