Я пишу Java-программу для доступа к службе истории заданий Hadoop для получения некоторой информации.
Я использую HTTPClient для вызова HttpGet. Мне нужно войти в систему из файла keytab (у меня есть файл в моей папке ~/.ssh/), а не вводить имя пользователя и пароль.
Мой вопрос: как войти с keytab в HTTPClient?
Вот как я настроил свой 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. Но после того, как я создам и запущу его из командной строки, он покажет информацию, чтобы запросить у меня имя пользователя и пароль.
Я новичок в аутентификации, надеюсь, кто-нибудь может помочь. Большое спасибо.