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 <els...@apache.org> Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/8da77b41 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/8da77b41 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/8da77b41 Branch: refs/heads/HBASE-14070.HLC Commit: 8da77b414657f0ee3b093913de5f92eba17ecd2a Parents: 4dd24c5 Author: Tamas Penzes <tam...@cloudera.com> Authored: Tue Aug 8 13:45:09 2017 +0200 Committer: Josh Elser <els...@apache.org> Committed: Thu Aug 10 23:47:07 2017 -0400 ---------------------------------------------------------------------- hbase-examples/README.txt | 3 ++- .../org/apache/hadoop/hbase/thrift/DemoClient.java | 15 ++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/8da77b41/hbase-examples/README.txt ---------------------------------------------------------------------- diff --git a/hbase-examples/README.txt b/hbase-examples/README.txt index 22d1103..bf28180 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 <host> <port>} 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 <host> <port> true} + {java -cp hbase-examples-[VERSION].jar:${HBASE_EXAMPLE_CLASSPATH} org.apache.hadoop.hbase.thrift.DemoClient <host> <port> true <server-principal>} + <server-principal> 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} http://git-wip-us.apache.org/repos/asf/hbase/blob/8da77b41/hbase-examples/src/main/java/org/apache/hadoop/hbase/thrift/DemoClient.java ---------------------------------------------------------------------- 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 cb0cfbb..706f82f 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<Void>() { @@ -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); }