Merge pull request #979 from marcosbarbero/master

* pull979:
  Use request.characterEncoding prior to default encoding
This commit is contained in:
Spencer Gibb
2016-06-03 13:21:06 -06:00
2 changed files with 38 additions and 3 deletions

View File

@@ -52,6 +52,7 @@ import lombok.extern.apachecommons.CommonsLog;
/** /**
* @author Dave Syer * @author Dave Syer
* @author Marcos Barbero
*/ */
@CommonsLog @CommonsLog
public class ProxyRequestHelper { public class ProxyRequestHelper {
@@ -98,8 +99,7 @@ public class ProxyRequestHelper {
String contextURI = (String) context.get("requestURI"); String contextURI = (String) context.get("requestURI");
if (contextURI != null) { if (contextURI != null) {
try { try {
uri = UriUtils.encodePath(contextURI, uri = UriUtils.encodePath(contextURI, characterEncoding(request));
WebUtils.DEFAULT_CHARACTER_ENCODING);
} }
catch (Exception e) { catch (Exception e) {
log.debug( log.debug(
@@ -110,6 +110,11 @@ public class ProxyRequestHelper {
return uri; return uri;
} }
private String characterEncoding(HttpServletRequest request) {
return request.getCharacterEncoding() != null ? request.getCharacterEncoding()
: WebUtils.DEFAULT_CHARACTER_ENCODING;
}
public MultiValueMap<String, String> buildZuulRequestQueryParams( public MultiValueMap<String, String> buildZuulRequestQueryParams(
HttpServletRequest request) { HttpServletRequest request) {
Map<String, List<String>> map = HTTPRequestUtils.getInstance().getQueryParams(); Map<String, List<String>> map = HTTPRequestUtils.getInstance().getQueryParams();
@@ -267,7 +272,8 @@ public class ProxyRequestHelper {
/* for tests */ boolean shouldDebugBody(RequestContext ctx) { /* for tests */ boolean shouldDebugBody(RequestContext ctx) {
HttpServletRequest request = ctx.getRequest(); HttpServletRequest request = ctx.getRequest();
if (!this.traceRequestBody || ctx.isChunkedRequestBody() || RequestUtils.isZuulServletRequest()) { if (!this.traceRequestBody || ctx.isChunkedRequestBody()
|| RequestUtils.isZuulServletRequest()) {
return false; return false;
} }
if (request == null || request.getContentType() == null) { if (request == null || request.getContentType() == null) {

View File

@@ -259,4 +259,33 @@ public class ProxyRequestHelperTests {
assertThat(queryString, is("?wsdl")); assertThat(queryString, is("?wsdl"));
} }
@Test
public void buildZuulRequestURIWithUTF8() throws Exception {
String encodedURI = "/resource/esp%C3%A9cial-char";
String decodedURI = "/resource/espécial-char";
MockHttpServletRequest request = new MockHttpServletRequest("GET", encodedURI);
request.setCharacterEncoding("UTF-8");
final RequestContext context = RequestContext.getCurrentContext();
context.setRequest(request);
context.set("requestURI", decodedURI);
final String requestURI = new ProxyRequestHelper().buildZuulRequestURI(request);
assertThat(requestURI, equalTo(encodedURI));
}
@Test
public void buildZuulRequestURIWithDefaultEncoding() {
String encodedURI = "/resource/esp%E9cial-char";
String decodedURI = "/resource/espécial-char";
MockHttpServletRequest request = new MockHttpServletRequest("GET", encodedURI);
final RequestContext context = RequestContext.getCurrentContext();
context.setRequest(request);
context.set("requestURI", decodedURI);
final String requestURI = new ProxyRequestHelper().buildZuulRequestURI(request);
assertThat(requestURI, equalTo(encodedURI));
}
} }