Commit 8952cff2 by Nicolas Byl Committed by Dave Syer

Use the original query string when forwarding the request

to ensure compatibility with legacy apps Fixes gh-989
parent 1c3de94c
......@@ -232,12 +232,18 @@ public class ProxyRequestHelper {
public Map<String, Object> debug(String verb, String uri,
MultiValueMap<String, String> headers, MultiValueMap<String, String> params,
InputStream requestEntity) throws IOException {
return debug(verb, uri, headers, getQueryString(params), requestEntity);
}
public Map<String, Object> debug(String verb, String uri,
MultiValueMap<String, String> headers, String queryString,
InputStream requestEntity) throws IOException {
Map<String, Object> info = new LinkedHashMap<>();
if (this.traces != null) {
RequestContext context = RequestContext.getCurrentContext();
info.put("method", verb);
info.put("path", uri);
info.put("query", getQueryString(params));
info.put("query", queryString);
info.put("remote", true);
info.put("proxy", context.get("proxy"));
Map<String, Object> trace = new LinkedHashMap<>();
......@@ -334,4 +340,8 @@ public class ProxyRequestHelper {
UriTemplate template = new UriTemplate("?" + query.toString().substring(1));
return template.expand(singles).toString();
}
public String formatQueryString(String queryString) {
return (queryString == null) ? "": "?" + queryString;
}
}
......@@ -158,8 +158,6 @@ public class SimpleHostRoutingFilter extends ZuulFilter {
HttpServletRequest request = context.getRequest();
MultiValueMap<String, String> headers = this.helper
.buildZuulRequestHeaders(request);
MultiValueMap<String, String> params = this.helper
.buildZuulRequestQueryParams(request);
String verb = getVerb(request);
InputStream requestEntity = getRequestBody(request);
if (request.getContentLength() < 0) {
......@@ -171,7 +169,7 @@ public class SimpleHostRoutingFilter extends ZuulFilter {
try {
HttpResponse response = forward(this.httpClient, verb, uri, request, headers,
params, requestEntity);
request.getQueryString(), requestEntity);
setResponse(response);
}
catch (Exception ex) {
......@@ -248,9 +246,9 @@ public class SimpleHostRoutingFilter extends ZuulFilter {
private HttpResponse forward(HttpClient httpclient, String verb, String uri,
HttpServletRequest request, MultiValueMap<String, String> headers,
MultiValueMap<String, String> params, InputStream requestEntity)
String queryString, InputStream requestEntity)
throws Exception {
Map<String, Object> info = this.helper.debug(verb, uri, headers, params,
Map<String, Object> info = this.helper.debug(verb, uri, headers, queryString,
requestEntity);
URL host = RequestContext.getCurrentContext().getRouteHost();
HttpHost httpHost = getHttpHost(host);
......@@ -261,24 +259,23 @@ public class SimpleHostRoutingFilter extends ZuulFilter {
ContentType.create(request.getContentType()));
switch (verb.toUpperCase()) {
case "POST":
HttpPost httpPost = new HttpPost(uri + this.helper.getQueryString(params));
HttpPost httpPost = new HttpPost(uri + this.helper.formatQueryString(queryString));
httpRequest = httpPost;
httpPost.setEntity(entity);
break;
case "PUT":
HttpPut httpPut = new HttpPut(uri + this.helper.getQueryString(params));
HttpPut httpPut = new HttpPut(uri + this.helper.formatQueryString(queryString));
httpRequest = httpPut;
httpPut.setEntity(entity);
break;
case "PATCH":
HttpPatch httpPatch = new HttpPatch(uri + this.helper.getQueryString(params));
HttpPatch httpPatch = new HttpPatch(uri + this.helper.formatQueryString(queryString));
httpRequest = httpPatch;
httpPatch.setEntity(entity);
break;
default:
httpRequest = new BasicHttpRequest(verb,
uri + this.helper.getQueryString(params));
log.debug(uri + this.helper.getQueryString(params));
uri + this.helper.formatQueryString(queryString));
}
try {
httpRequest.setHeaders(convertHeaders(headers));
......
......@@ -259,4 +259,15 @@ public class ProxyRequestHelperTests {
assertThat(queryString, is("?wsdl"));
}
@Test
public void formatQueryStringShouldPrependQuestionMark() {
String queryString = new ProxyRequestHelper().formatQueryString("a=1234&b=5678");
assertThat(queryString, is("?a=1234&b=5678"));
}
@Test
public void formatQueryStringShouldReturnEmptyStringForNullValue() {
assertThat(new ProxyRequestHelper().formatQueryString(null), is(""));
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment