diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/ProxyRequestHelperTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/ProxyRequestHelperTests.java index db039bea..e2b4fb23 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/ProxyRequestHelperTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/ProxyRequestHelperTests.java @@ -288,4 +288,36 @@ public class ProxyRequestHelperTests { assertThat(requestURI, equalTo(encodedURI)); } + @Test + public void getUTF8Url() { + String requestURI = "/oléדרעק"; + String encodedRequestURI = "/ol%C3%A9%D7%93%D7%A8%D7%A2%D7%A7"; + MockHttpServletRequest request = new MockHttpServletRequest("GET", requestURI); + request.setCharacterEncoding("UTF-8"); + + RequestContext context = RequestContext.getCurrentContext(); + context.set("requestURI", requestURI); + + ProxyRequestHelper helper = new ProxyRequestHelper(); + + String uri = helper.buildZuulRequestURI(request); + + assertThat(uri, is(encodedRequestURI)); + } + + @Test + public void getDefaultEncodingUrl() { + String requestURI = "/oléדרעק"; + String encodedRequestURI = "/ol%E9%3F%3F%3F%3F"; + MockHttpServletRequest request = new MockHttpServletRequest("GET", requestURI); + + RequestContext context = RequestContext.getCurrentContext(); + context.set("requestURI", requestURI); + + ProxyRequestHelper helper = new ProxyRequestHelper(); + + String uri = helper.buildZuulRequestURI(request); + + assertThat(uri, is(encodedRequestURI)); + } } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilterTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilterTests.java index cf9cfe6a..9b521676 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilterTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilterTests.java @@ -377,6 +377,19 @@ public class PreDecorationFilterTests { assertTrue("sensitiveHeaders is wrong: " + sensitiveHeaders, sensitiveHeaders.containsAll(Arrays.asList("x-bar", "x-foo"))); } + + @Test + public void urlProperlyDecodedWhenCharacterEncodingIsSet() throws Exception { + this.request.setCharacterEncoding("UTF-8"); + this.properties.setPrefix("/api"); + this.properties.setStripPrefix(true); + this.request.setRequestURI("/api/foo/ol%C3%A9%D7%93%D7%A8%D7%A2%D7%A7"); + this.routeLocator.addRoute("/foo/**", "foo"); + RequestContext ctx = RequestContext.getCurrentContext(); + this.filter.run(); + String decodedRequestURI = (String) ctx.get("requestURI"); + assertTrue(decodedRequestURI.equals("/oléדרעק")); + } private Object getHeader(List> headers, String key) { String value = null;