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 49eabaa..51eb609 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 @@ -136,10 +136,14 @@ public void doFilter(ServletRequest req, ServletResponse resp, LOG.debug("Remote address for request is: " + httpReq.getRemoteAddr()); } if(!getProxyAddresses().contains(httpReq.getRemoteAddr())) { - String redirectUrl = findRedirectUrl(); - redirectUrl = httpResp.encodeRedirectURL(redirectUrl + - httpReq.getRequestURI()); - httpResp.sendRedirect(redirectUrl); + StringBuilder target = new StringBuilder().append(findRedirectUrl()); + target.append(httpReq.getRequestURI()); + String queryParams = httpReq.getQueryString(); + if (queryParams != null && !queryParams.isEmpty()) { + target.append("&"); + target.append(queryParams); + } + httpResp.sendRedirect(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 001dcf9..56c3541 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 @@ -161,6 +161,12 @@ public void doFilter(ServletRequest servletRequest, testFilter.doFilter(request, response, chain); // address "redirect" is not in host list assertEquals("http://bogus/redirect", response.getRedirect()); + // 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("http://bogus/proxy/application_00_0?id=0", response.getRedirect()); + // "127.0.0.1" contains in host list. Without cookie Mockito.when(request.getRemoteAddr()).thenReturn("127.0.0.1"); testFilter.doFilter(request, response, chain);