From 8da77b414657f0ee3b093913de5f92eba17ecd2a Mon Sep 17 00:00:00 2001 From: Tamas Penzes Date: Tue, 8 Aug 2017 13:45:09 +0200 Subject: [PATCH] HBASE-18387: [Thrift] Make principal configurable in DemoClient.java Added optional (fourth) parameter "server-principal" The solution is backward compatible, in case not given, uses "hbase" as default value If the third parameter is skipped the fourth cannot be set. Signed-off-by: Josh Elser --- hbase-examples/README.txt | 3 ++- .../apache/hadoop/hbase/thrift/DemoClient.java | 15 ++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/hbase-examples/README.txt b/hbase-examples/README.txt index 22d11039d83..bf28180f876 100644 --- a/hbase-examples/README.txt +++ b/hbase-examples/README.txt @@ -28,7 +28,8 @@ Example code. 2. If HBase server is not secure, or authentication is not enabled for the Thrift server, execute: {java -cp hbase-examples-[VERSION].jar:${HBASE_EXAMPLE_CLASSPATH} org.apache.hadoop.hbase.thrift.DemoClient } 3. If HBase server is secure, and authentication is enabled for the Thrift server, run kinit at first, then execute: - {java -cp hbase-examples-[VERSION].jar:${HBASE_EXAMPLE_CLASSPATH} org.apache.hadoop.hbase.thrift.DemoClient true} + {java -cp hbase-examples-[VERSION].jar:${HBASE_EXAMPLE_CLASSPATH} org.apache.hadoop.hbase.thrift.DemoClient true } + should only be specified when the client connects to a secure cluster. It's default value is "hbase". 4. Here is a lazy example that just pulls in all hbase dependency jars and that goes against default location on localhost. It should work with a standalone hbase instance started by doing ./bin/start-hbase.sh: {java -cp ./hbase-examples/target/hbase-examples-2.0.0-SNAPSHOT.jar:`./bin/hbase classpath` org.apache.hadoop.hbase.thrift.DemoClient localhost 9090} diff --git a/hbase-examples/src/main/java/org/apache/hadoop/hbase/thrift/DemoClient.java b/hbase-examples/src/main/java/org/apache/hadoop/hbase/thrift/DemoClient.java index cb0cfbbdb22..706f82f3647 100644 --- a/hbase-examples/src/main/java/org/apache/hadoop/hbase/thrift/DemoClient.java +++ b/hbase-examples/src/main/java/org/apache/hadoop/hbase/thrift/DemoClient.java @@ -60,13 +60,14 @@ public class DemoClient { CharsetDecoder decoder = null; private static boolean secure = false; + private static String serverPrincipal = "hbase"; public static void main(String[] args) throws Exception { - if (args.length < 2 || args.length > 3) { + if (args.length < 2 || args.length > 4 || (args.length > 2 && !isBoolean(args[2]))) { System.out.println("Invalid arguments!"); - System.out.println("Usage: DemoClient host port [secure=false]"); + System.out.println("Usage: DemoClient host port [secure=false [server-principal=hbase] ]"); System.exit(-1); } @@ -77,6 +78,10 @@ public class DemoClient { secure = Boolean.parseBoolean(args[2]); } + if (args.length == 4) { + serverPrincipal = args[3]; + } + final DemoClient client = new DemoClient(); Subject.doAs(getSubject(), new PrivilegedExceptionAction() { @@ -88,6 +93,10 @@ public class DemoClient { }); } + private static boolean isBoolean(String s){ + return Boolean.TRUE.toString().equalsIgnoreCase(s) || Boolean.FALSE.toString().equalsIgnoreCase(s); + } + DemoClient() { decoder = Charset.forName("UTF-8").newDecoder(); } @@ -123,7 +132,7 @@ public class DemoClient { * The HBase cluster must be secure, allow proxy user. */ transport = new TSaslClientTransport("GSSAPI", null, - "hbase", // Thrift server user name, should be an authorized proxy user. + serverPrincipal, // Thrift server user name, should be an authorized proxy user. host, // Thrift server domain saslProperties, null, transport); }