diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/amfilter/AmIpFilter.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/amfilter/AmIpFilter.java index e7617f0..705a7d0 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/amfilter/AmIpFilter.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/amfilter/AmIpFilter.java @@ -135,9 +135,16 @@ public void doFilter(ServletRequest req, ServletResponse resp, LOG.debug("Remote address for request is: {}", httpReq.getRemoteAddr()); } if (!getProxyAddresses().contains(httpReq.getRemoteAddr())) { - String redirectUrl = findRedirectUrl(); - String target = redirectUrl + httpReq.getRequestURI(); - ProxyUtils.sendRedirect(httpReq, httpResp, target); + StringBuilder target = new StringBuilder().append(findRedirectUrl()); + target.append(httpReq.getRequestURI()); + // add the query parameters on the redirect if there were any + String queryString = httpReq.getQueryString(); + if (queryString != null && !queryString.isEmpty()) { + target.append("?"); + target.append(queryString); + } + + ProxyUtils.sendRedirect(httpReq, httpResp, target.toString()); return; } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/test/java/org/apache/hadoop/yarn/server/webproxy/amfilter/TestAmFilter.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/test/java/org/apache/hadoop/yarn/server/webproxy/amfilter/TestAmFilter.java index 6f64777..67bbc64 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/test/java/org/apache/hadoop/yarn/server/webproxy/amfilter/TestAmFilter.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/test/java/org/apache/hadoop/yarn/server/webproxy/amfilter/TestAmFilter.java @@ -21,6 +21,7 @@ import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; +import java.net.HttpURLConnection; import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; @@ -163,9 +164,17 @@ public void doFilter(ServletRequest servletRequest, Mockito.when(request.getRequestURI()).thenReturn("/redirect"); testFilter.doFilter(request, response, chain); // address "redirect" is not in host list - assertEquals(302, response.status); + assertEquals(HttpURLConnection.HTTP_MOVED_TEMP, response.status); String redirect = response.getHeader(ProxyUtils.LOCATION); assertEquals("http://bogus/redirect", redirect); + // check for query parameters + Mockito.when(request.getRequestURI()).thenReturn("/proxy/application_00_0"); + Mockito.when(request.getQueryString()).thenReturn("id=0"); + testFilter.doFilter(request, response, chain); + assertEquals(HttpURLConnection.HTTP_MOVED_TEMP, response.status); + redirect = response.getHeader(ProxyUtils.LOCATION); + assertEquals("http://bogus/proxy/application_00_0?id=0", redirect); + // "127.0.0.1" contains in host list. Without cookie Mockito.when(request.getRemoteAddr()).thenReturn("127.0.0.1"); testFilter.doFilter(request, response, chain);