diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/security/provider/BuiltInProviderSelector.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/security/provider/BuiltInProviderSelector.java index 8d20171c596e..752003dad8c6 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/security/provider/BuiltInProviderSelector.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/security/provider/BuiltInProviderSelector.java @@ -29,6 +29,7 @@ import org.apache.hadoop.hbase.security.User; import org.apache.hadoop.hbase.util.Pair; import org.apache.hadoop.io.Text; +import org.apache.hadoop.security.UserGroupInformation; import org.apache.hadoop.security.token.Token; import org.apache.hadoop.security.token.TokenIdentifier; import org.apache.yetus.audience.InterfaceAudience; @@ -124,8 +125,11 @@ public Pair> } } // Unwrap PROXY auth'n method if that's what we have coming in. - if (user.getUGI().hasKerberosCredentials() || - user.getUGI().getRealUser().hasKerberosCredentials()) { + final UserGroupInformation currentUser = user.getUGI(); + // May be null if Hadoop AuthenticationMethod is PROXY + final UserGroupInformation realUser = currentUser.getRealUser(); + if (currentUser.hasKerberosCredentials() || + (realUser != null && realUser.hasKerberosCredentials())) { return new Pair<>(krbAuth, null); } // This indicates that a client is requesting some authentication mechanism which the servers diff --git a/hbase-rest/pom.xml b/hbase-rest/pom.xml index 6a0c7e3ab73b..3d9806db79fb 100644 --- a/hbase-rest/pom.xml +++ b/hbase-rest/pom.xml @@ -543,3 +543,4 @@ + diff --git a/hbase-server/pom.xml b/hbase-server/pom.xml index 57227abccdd1..5d70fdbfb7bd 100644 --- a/hbase-server/pom.xml +++ b/hbase-server/pom.xml @@ -897,3 +897,4 @@ + diff --git a/hbase-thrift/pom.xml b/hbase-thrift/pom.xml index 2de14efcec5a..fc199b5842f7 100644 --- a/hbase-thrift/pom.xml +++ b/hbase-thrift/pom.xml @@ -600,3 +600,4 @@ +