我正在编写一个 java 程序来访问 hadoop jobhistory 服务以检索一些信息。
我正在使用 HTTPClient 进行 HttpGet 调用。我需要从 keytab 文件(我的 ~/.ssh/ 文件夹中有该文件)登录,而不是输入用户名和密码。
我的问题是:如何从 HTTPClient 中的 keytab 登录?
这是我设置 HTTPClient 的方式
System.setProperty("java.security.krb5.conf", "krb5.conf");
System.setProperty("sun.security.krb5.debug", "true");
System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");
System.setProperty("java.security.krb5.realm", prop.getProperty("krb5.realm"));
System.setProperty("java.security.krb5.kdc", prop.getProperty("krb5.kdc"));
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(200);
cm.setDefaultMaxPerRoute(100);
//TODO login from keytab ?
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("DUMMY", null));
Lookup<AuthSchemeProvider> authRegistry = RegistryBuilder.<AuthSchemeProvider>create()
.register(AuthSchemes.SPNEGO, new SPNegoSchemeFactory())
.build();
httpClient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider)
.setDefaultAuthSchemeRegistry(authRegistry)
.setConnectionManager(cm)
.build();
HttpResponse response = httpClient.execute(request);
一个有趣的是这段代码可以在我的 IntelliJ 中成功运行。但是在我从命令行构建并运行它之后,它会显示信息,要求我输入用户名和密码。
我是身份验证的新手,希望有人可以提供帮助。非常感谢。