diff --git a/plugin.xml b/plugin.xml
index 8d02872..7954572 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -4,7 +4,7 @@
yes
no
- 1.3
+ 1.4
10.0
2018-12-27
rinoux
diff --git a/src/main/java/com/fr/plugin/hdfs/repository/core/HDFSRepositoryFactory.java b/src/main/java/com/fr/plugin/hdfs/repository/core/HDFSRepositoryFactory.java
index 0ad320f..bd99022 100644
--- a/src/main/java/com/fr/plugin/hdfs/repository/core/HDFSRepositoryFactory.java
+++ b/src/main/java/com/fr/plugin/hdfs/repository/core/HDFSRepositoryFactory.java
@@ -18,8 +18,11 @@ import org.apache.hadoop.hdfs.DistributedFileSystem;
import org.apache.hadoop.security.AnnotatedSecurityInfo;
import org.apache.hadoop.security.SecurityUtil;
import org.apache.hadoop.security.UserGroupInformation;
+import org.apache.hadoop.security.authentication.util.KerberosName;
+import org.apache.hadoop.security.authentication.util.KerberosUtil;
import java.io.IOException;
+import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.URI;
@@ -86,11 +89,12 @@ public class HDFSRepositoryFactory extends ConfigRepositoryFactory {
String hdfsUrl = HDFS_SCHEMA.concat(host).concat(":").concat(port);
String principal = config.getPrincipal();
String krb5Conf = config.getKrbConf();
+ String keyTab = config.getKeyTab();
FineLoggerFactory.getLogger().debug("[HDFS REPOSITORY] Host:{}", host);
FineLoggerFactory.getLogger().debug("[HDFS REPOSITORY] Port:{}", port);
FineLoggerFactory.getLogger().debug("[HDFS REPOSITORY] Principal:{}", principal);
- FineLoggerFactory.getLogger().debug("[HDFS REPOSITORY] KeyTab:{}", config.getKeyTab());
+ FineLoggerFactory.getLogger().debug("[HDFS REPOSITORY] KeyTab:{}", keyTab);
FineLoggerFactory.getLogger().debug("[HDFS REPOSITORY] krb5.conf:{}", krb5Conf);
@@ -108,9 +112,16 @@ public class HDFSRepositoryFactory extends ConfigRepositoryFactory {
//类似OSGI下,类加载需要设置SecurityUtil.setSecurityInfoProviders(new AnnotatedSecurityInfo());
//refer to https://stackoverflow.com/questions/37608049/how-to-connect-with-hdfs-via-kerberos-from-osgi-bundles
SecurityUtil.setSecurityInfoProviders(new AnnotatedSecurityInfo());
- //UserGroupInformation初始化
+
+ //重置defaultRealm,hadoop2.7以前没有提供resetDefaultRealm方法,需要反射设置一下这个变量,否则无法登录
+ Field field = KerberosName.class.getDeclaredField("defaultRealm");
+ assert field != null;
+ field.setAccessible(true);
+ field.set(KerberosName.class, KerberosUtil.getDefaultRealm());
+
+ //UserGroupInformation初始化和登录验证
UserGroupInformation.setConfiguration(conf);
- UserGroupInformation.loginUserFromKeytab(principal, config.getKeyTab());
+ UserGroupInformation.loginUserFromKeytab(principal, keyTab);
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
} finally {