From 4e7e18732314dec62e1db7fc92b55677d0379621 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Tue, 18 Dec 2018 14:48:31 -0500 Subject: [PATCH] Fix bug where host contains protocol characters (#97) Fixes #94 --- .../openfeign/ribbon/LoadBalancerFeignClient.java | 7 ++++++- .../cloud/openfeign/ribbon/FeignRibbonClientTests.java | 10 ++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/ribbon/LoadBalancerFeignClient.java b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/ribbon/LoadBalancerFeignClient.java index 4e210323..b4bb5ac7 100644 --- a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/ribbon/LoadBalancerFeignClient.java +++ b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/ribbon/LoadBalancerFeignClient.java @@ -97,7 +97,12 @@ public class LoadBalancerFeignClient implements Client { } static URI cleanUrl(String originalUrl, String host) { - String newUrl = originalUrl.replaceFirst(host, ""); + String newUrl = originalUrl; + if(originalUrl.startsWith("https://")) { + newUrl = originalUrl.substring(0, 8) + originalUrl.substring(8 + host.length()); + } else if(originalUrl.startsWith("http")) { + newUrl = originalUrl.substring(0, 7) + originalUrl.substring(7 + host.length()); + } StringBuffer buffer = new StringBuffer(newUrl); if((newUrl.startsWith("https://") && newUrl.length() == 8) || (newUrl.startsWith("http://") && newUrl.length() == 7)) { diff --git a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/ribbon/FeignRibbonClientTests.java b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/ribbon/FeignRibbonClientTests.java index ab7fc108..c0e7ca47 100644 --- a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/ribbon/FeignRibbonClientTests.java +++ b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/ribbon/FeignRibbonClientTests.java @@ -109,6 +109,16 @@ public class FeignRibbonClientTests { any(Options.class)); } + @Test + public void verifyCleanUrl() throws Exception { + Request request = new RequestTemplate().method("GET").append("http://tp/abc/bcd.json") + .request(); + this.client.execute(request, new Options()); + RequestMatcher matcher = new RequestMatcher("http://foo.com:8000/abc/bcd.json"); + verify(this.delegate).execute(argThat(matcher), + any(Options.class)); + } + @Test public void remoteRequestIsSecure() throws Exception { Request request = new RequestTemplate().method("GET").append("https://foo/")