You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2014/02/05 22:24:24 UTC

svn commit: r1564936 - in /hbase/branches/0.94/src: main/java/org/apache/hadoop/hbase/rest/ main/java/org/apache/hadoop/hbase/util/ test/java/org/apache/hadoop/hbase/rest/

Author: stack
Date: Wed Feb  5 21:24:23 2014
New Revision: 1564936

URL: http://svn.apache.org/r1564936
Log:
HBASE-10473 Add utility for adorning http Context

Added:
    hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/util/HttpServerUtil.java
Modified:
    hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/rest/Main.java
    hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/util/InfoServer.java
    hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/rest/HBaseRESTTestingUtility.java

Modified: hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/rest/Main.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/rest/Main.java?rev=1564936&r1=1564935&r2=1564936&view=diff
==============================================================================
--- hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/rest/Main.java (original)
+++ hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/rest/Main.java Wed Feb  5 21:24:23 2014
@@ -31,6 +31,7 @@ import org.apache.commons.logging.LogFac
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.HBaseConfiguration;
 import org.apache.hadoop.hbase.client.UserProvider;
+import org.apache.hadoop.hbase.util.HttpServerUtil;
 import org.apache.hadoop.hbase.rest.filter.GzipFilter;
 import org.apache.hadoop.hbase.security.User;
 import org.apache.hadoop.hbase.util.InfoServer;
@@ -198,6 +199,7 @@ public class Main implements Constants {
     context.addServlet(shPojoMap, "/status/cluster");
     context.addServlet(sh, "/*");
     context.addFilter(GzipFilter.class, "/*", 0);
+    HttpServerUtil.constrainHttpMethods(context);
 
     // Put up info server.
     int port = conf.getInt("hbase.rest.info.port", 8085);
@@ -213,4 +215,4 @@ public class Main implements Constants {
     server.start();
     server.join();
   }
-}
\ No newline at end of file
+}

Added: hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/util/HttpServerUtil.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/util/HttpServerUtil.java?rev=1564936&view=auto
==============================================================================
--- hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/util/HttpServerUtil.java (added)
+++ hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/util/HttpServerUtil.java Wed Feb  5 21:24:23 2014
@@ -0,0 +1,52 @@
+/**
+ * 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.hadoop.hbase.util;
+
+import org.mortbay.jetty.security.Constraint;
+import org.mortbay.jetty.security.ConstraintMapping;
+import org.mortbay.jetty.security.SecurityHandler;
+import org.mortbay.jetty.servlet.Context;
+
+/**
+ * HttpServer utility.
+ */
+public class HttpServerUtil {
+  /**
+   * Add constraints to a Jetty Context to disallow undesirable Http methods.
+   * @param context The context to modify
+   */
+  public static void constrainHttpMethods(Context context) {
+    Constraint c = new Constraint();
+    c.setAuthenticate(true);
+
+    ConstraintMapping cmt = new ConstraintMapping();
+    cmt.setConstraint(c);
+    cmt.setMethod("TRACE");
+    cmt.setPathSpec("/*");
+
+    ConstraintMapping cmo = new ConstraintMapping();
+    cmo.setConstraint(c);
+    cmo.setMethod("OPTIONS");
+    cmo.setPathSpec("/*");
+
+    SecurityHandler sh = new SecurityHandler();
+    sh.setConstraintMappings(new ConstraintMapping[]{ cmt, cmo });
+
+    context.addHandler(sh);
+  }
+}
\ No newline at end of file

Modified: hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/util/InfoServer.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/util/InfoServer.java?rev=1564936&r1=1564935&r2=1564936&view=diff
==============================================================================
--- hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/util/InfoServer.java (original)
+++ hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/util/InfoServer.java Wed Feb  5 21:24:23 2014
@@ -90,6 +90,7 @@ public class InfoServer extends HttpServ
           logsContextPath);
       logContext.setResourceBase(logDir);
       logContext.addServlet(DefaultServlet.class, "/");
+      HttpServerUtil.constrainHttpMethods(logContext);
       defaultContexts.put(logContext, true);
     }
   }

Modified: hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/rest/HBaseRESTTestingUtility.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/rest/HBaseRESTTestingUtility.java?rev=1564936&r1=1564935&r2=1564936&view=diff
==============================================================================
--- hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/rest/HBaseRESTTestingUtility.java (original)
+++ hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/rest/HBaseRESTTestingUtility.java Wed Feb  5 21:24:23 2014
@@ -27,6 +27,7 @@ import org.apache.hadoop.util.StringUtil
 import org.mortbay.jetty.Server;
 import org.mortbay.jetty.servlet.Context;
 import org.mortbay.jetty.servlet.ServletHolder;
+import org.apache.hadoop.hbase.util.HttpServerUtil;
 
 import com.sun.jersey.spi.container.servlet.ServletContainer;
 
@@ -68,6 +69,7 @@ public class HBaseRESTTestingUtility {
     Context context = new Context(server, "/", Context.SESSIONS);
     context.addServlet(sh, "/*");
     context.addFilter(GzipFilter.class, "/*", 0);
+    HttpServerUtil.constrainHttpMethods(context);
       // start the server
     server.start();
       // get the port