From a4c995a394d99b3303d6bf3245a99b0fa33390fe Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Wed, 3 Jan 2018 14:19:39 -0500 Subject: [PATCH] Disable following redirects in SimpleHostRoutingFilter. Fixes #2578. (#2608) --- .../route/SimpleHostRoutingFilter.java | 2 +- .../route/SimpleHostRoutingFilterTests.java | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/SimpleHostRoutingFilter.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/SimpleHostRoutingFilter.java index 58a368d7..db068f5c 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/SimpleHostRoutingFilter.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/SimpleHostRoutingFilter.java @@ -220,7 +220,7 @@ public class SimpleHostRoutingFilter extends ZuulFilter { .setCookieSpec(CookieSpecs.IGNORE_COOKIES).build(); return httpClientFactory.createBuilder(). setDefaultRequestConfig(requestConfig). - setConnectionManager(this.connectionManager).build(); + setConnectionManager(this.connectionManager).disableRedirectHandling().build(); } private CloseableHttpResponse forward(CloseableHttpClient httpclient, String verb, diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/SimpleHostRoutingFilterTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/SimpleHostRoutingFilterTests.java index 43212d12..df348692 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/SimpleHostRoutingFilterTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/SimpleHostRoutingFilterTests.java @@ -196,6 +196,20 @@ public class SimpleHostRoutingFilterTests { assertTrue("Get 1".equals(responseString)); } + + @Test + public void redirectTest() throws Exception { + setupContext(); + InputStreamEntity inputStreamEntity = new InputStreamEntity(new ByteArrayInputStream(new byte[]{})); + HttpRequest httpRequest = getFilter().buildHttpRequest("GET", "/app/redirect", inputStreamEntity, + new LinkedMultiValueMap(), new LinkedMultiValueMap(), new MockHttpServletRequest()); + + CloseableHttpResponse response = getFilter().newClient().execute(new HttpHost("localhost", this.port), httpRequest); + assertEquals(302, response.getStatusLine().getStatusCode()); + String responseString = copyToString(response.getEntity().getContent(), Charset.forName("UTF-8")); + assertTrue(response.getLastHeader("Location").getValue().contains("/app/get/5")); + } + @Test public void zuulHostKeysUpdateHttpClient() { setupContext(); @@ -259,6 +273,12 @@ class SampleApplication { public String getString(@PathVariable String id, HttpServletResponse response) throws IOException { return "Get " + id; } + + @RequestMapping(value = "/redirect", method = RequestMethod.GET) + public String redirect(HttpServletResponse response) throws IOException { + response.sendRedirect("/app/get/5"); + return null; + } } class GZIPCompression {