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);

Reply via email to