Repository: hive Updated Branches: refs/heads/master 913911b86 -> fc425933e
HIVE-19277: Active/Passive HA web endpoints does not allow cross origin requests (Prasanth Jayachandran reviewed by Sergey Shelukhin) Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/fc425933 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/fc425933 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/fc425933 Branch: refs/heads/master Commit: fc425933e9cbd1ec7f023b8d7783fee09dfd544e Parents: 913911b Author: Prasanth Jayachandran <prasan...@apache.org> Authored: Thu Apr 26 12:20:32 2018 -0700 Committer: Prasanth Jayachandran <prasan...@apache.org> Committed: Thu Apr 26 12:20:32 2018 -0700 ---------------------------------------------------------------------- .../org/apache/hive/http/HttpConstants.java | 30 ++++++++++++++++++++ .../java/org/apache/hive/http/LlapServlet.java | 10 +++---- .../service/servlet/HS2LeadershipStatus.java | 20 +++++++++---- .../apache/hive/service/servlet/HS2Peers.java | 7 ++++- 4 files changed, 54 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/fc425933/service/src/java/org/apache/hive/http/HttpConstants.java ---------------------------------------------------------------------- diff --git a/service/src/java/org/apache/hive/http/HttpConstants.java b/service/src/java/org/apache/hive/http/HttpConstants.java new file mode 100644 index 0000000..6a0b2c9 --- /dev/null +++ b/service/src/java/org/apache/hive/http/HttpConstants.java @@ -0,0 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hive.http; + +public class HttpConstants { + public static final String CONTENT_TYPE_JSON = "application/json; charset=utf8"; + public static final String CACHE_CONTROL = "Cache-Control"; + public static final String ACCESS_CONTROL_ALLOW_METHODS = "Access-Control-Allow-Methods"; + public static final String ACCESS_CONTROL_ALLOW_ORIGIN = "Access-Control-Allow-Origin"; + public static final String WILDCARD = "*"; + public static final String METHOD_GET = "GET"; + public static final String METHOD_POST = "POST"; + public static final String METHOD_DELETE = "DELETE"; + public static final String METHOD_PUT = "PUT"; +} http://git-wip-us.apache.org/repos/asf/hive/blob/fc425933/service/src/java/org/apache/hive/http/LlapServlet.java ---------------------------------------------------------------------- diff --git a/service/src/java/org/apache/hive/http/LlapServlet.java b/service/src/java/org/apache/hive/http/LlapServlet.java index caf65f4..a0eb409 100644 --- a/service/src/java/org/apache/hive/http/LlapServlet.java +++ b/service/src/java/org/apache/hive/http/LlapServlet.java @@ -35,8 +35,6 @@ import org.apache.hadoop.hive.llap.cli.LlapStatusServiceDriver; public class LlapServlet extends HttpServlet { private static final Log LOG = LogFactory.getLog(JMXJsonServlet.class); - static final String ACCESS_CONTROL_ALLOW_METHODS = "Access-Control-Allow-Methods"; - static final String ACCESS_CONTROL_ALLOW_ORIGIN = "Access-Control-Allow-Origin"; /** * Initialize this servlet. @@ -75,10 +73,10 @@ public class LlapServlet extends HttpServlet { HiveConf.getVar(getConfFromContext(), HiveConf.ConfVars.LLAP_DAEMON_SERVICE_HOSTS); try { - response.setContentType("application/json; charset=utf8"); - response.setHeader(ACCESS_CONTROL_ALLOW_METHODS, "GET"); - response.setHeader(ACCESS_CONTROL_ALLOW_ORIGIN, "*"); - response.setHeader("Cache-Control", "no-transform,public,max-age=60,s-maxage=60"); + response.setContentType(HttpConstants.CONTENT_TYPE_JSON); + response.setHeader(HttpConstants.ACCESS_CONTROL_ALLOW_METHODS, HttpConstants.METHOD_GET); + response.setHeader(HttpConstants.ACCESS_CONTROL_ALLOW_ORIGIN, HttpConstants.WILDCARD); + response.setHeader(HttpConstants.CACHE_CONTROL, "no-transform,public,max-age=60,s-maxage=60"); writer = response.getWriter(); http://git-wip-us.apache.org/repos/asf/hive/blob/fc425933/service/src/java/org/apache/hive/service/servlet/HS2LeadershipStatus.java ---------------------------------------------------------------------- diff --git a/service/src/java/org/apache/hive/service/servlet/HS2LeadershipStatus.java b/service/src/java/org/apache/hive/service/servlet/HS2LeadershipStatus.java index 708fa0c..acb58c8 100644 --- a/service/src/java/org/apache/hive/service/servlet/HS2LeadershipStatus.java +++ b/service/src/java/org/apache/hive/service/servlet/HS2LeadershipStatus.java @@ -17,8 +17,6 @@ */ package org.apache.hive.service.servlet; -import static org.apache.hive.http.HttpServer.CONF_CONTEXT_ATTRIBUTE; - import java.io.IOException; import java.util.concurrent.atomic.AtomicBoolean; @@ -27,9 +25,7 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.fs.CommonConfigurationKeys; -import org.apache.hadoop.security.authentication.client.KerberosAuthenticator; +import org.apache.hive.http.HttpConstants; import org.apache.hive.http.HttpServer; import org.apache.hive.service.server.HiveServer2; import org.codehaus.jackson.map.ObjectMapper; @@ -57,6 +53,8 @@ public class HS2LeadershipStatus extends HttpServlet { return; } + setResponseHeaders(response); + ServletContext ctx = getServletContext(); AtomicBoolean isLeader = (AtomicBoolean) ctx.getAttribute("hs2.isLeader"); LOG.info("Returning isLeader: {}", isLeader); @@ -66,11 +64,19 @@ public class HS2LeadershipStatus extends HttpServlet { response.flushBuffer(); } + private void setResponseHeaders(final HttpServletResponse response) { + response.setContentType(HttpConstants.CONTENT_TYPE_JSON); + response.setHeader(HttpConstants.ACCESS_CONTROL_ALLOW_METHODS, + HttpConstants.METHOD_GET + "," + HttpConstants.METHOD_DELETE); + response.setHeader(HttpConstants.ACCESS_CONTROL_ALLOW_ORIGIN, HttpConstants.WILDCARD); + } + private class FailoverResponse { private boolean success; private String message; - FailoverResponse() { } + FailoverResponse() { + } public boolean isSuccess() { return success; @@ -101,6 +107,8 @@ public class HS2LeadershipStatus extends HttpServlet { return; } + setResponseHeaders(response); + LOG.info("DELETE handler invoked for failover.."); ObjectMapper mapper = new ObjectMapper(); FailoverResponse failoverResponse = new FailoverResponse(); http://git-wip-us.apache.org/repos/asf/hive/blob/fc425933/service/src/java/org/apache/hive/service/servlet/HS2Peers.java ---------------------------------------------------------------------- diff --git a/service/src/java/org/apache/hive/service/servlet/HS2Peers.java b/service/src/java/org/apache/hive/service/servlet/HS2Peers.java index bde6d6b..ac5b76c 100644 --- a/service/src/java/org/apache/hive/service/servlet/HS2Peers.java +++ b/service/src/java/org/apache/hive/service/servlet/HS2Peers.java @@ -26,7 +26,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.hadoop.hive.conf.HiveConf; -import org.apache.hadoop.security.authentication.client.KerberosAuthenticator; +import org.apache.hive.http.HttpConstants; import org.apache.hive.http.HttpServer; import org.apache.hive.service.server.HS2ActivePassiveHARegistry; import org.apache.hive.service.server.HS2ActivePassiveHARegistryClient; @@ -42,6 +42,7 @@ import org.slf4j.LoggerFactory; */ public class HS2Peers extends HttpServlet { private static final Logger LOG = LoggerFactory.getLogger(HS2Peers.class); + public static class HS2Instances { private Collection<HiveServer2Instance> hiveServer2Instances; @@ -81,6 +82,10 @@ public class HS2Peers extends HttpServlet { return; } + response.setContentType(HttpConstants.CONTENT_TYPE_JSON); + response.setHeader(HttpConstants.ACCESS_CONTROL_ALLOW_METHODS, HttpConstants.METHOD_GET); + response.setHeader(HttpConstants.ACCESS_CONTROL_ALLOW_ORIGIN, HttpConstants.WILDCARD); + ServletContext ctx = getServletContext(); HiveConf hiveConf = (HiveConf) ctx.getAttribute("hiveconf"); HS2ActivePassiveHARegistry hs2Registry = HS2ActivePassiveHARegistryClient.getClient(hiveConf);