Аутентификация с помощью RESTEasy Client API выполняется инкапсулированным ClientHttpEngine .Версия 3.0.19. Финал, на который я ссылаюсь в этом ответе, совместим с JAX-RS 2.0 и поставляется с двумя реализациями.Оба могут выполнять проверку подлинности NTLM.
Даже если это механизм по умолчанию, вам нужно настроить пользовательский экземпляр для предоставления учетных данных.Сначала Учетные данные должны быть добавлены к CredentialsProvider относительно конкретного AuthScope .Следующим шагом является их установка в HttpClientContext , который затем необходимо передать в движок.
Credentials credentials = new NTCredentials("user", "password", "workstation", "domain");
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(
new AuthScope(null, AuthScope.ANY_PORT, AuthScope.ANY_REALM, AuthSchemes.NTLM)
, credentials
);
HttpClientContext httpContext = HttpClientContext.create();
httpContext.setCredentialsProvider(credentialsProvider);
try (CloseableHttpClient httpClient = HttpClientBuilder.create().build();) {
ApacheHttpClient4Engine engine = new ApacheHttpClient4Engine(httpClient, httpContext);
ResteasyClient client = new ResteasyClientBuilder().httpEngine(engine).build();
// work with the client
}
Этот механизм использует HttpURLConnection , который каким-то образом вызывает Аутентификатор для выполнения аутентификации.Чтобы предоставить учетные данные, вы должны переопределить getPasswordAuthentication в пользовательском подклассе и зарегистрировать его по умолчанию.
public class NTLMAuthenticator extends Authenticator {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("domain\\user", "password".toCharArray());
}
}
Authenticator.setDefault(new NTLMAuthenticator());
ResteasyClient client =
new ResteasyClientBuilder().httpEngine(new URLConnectionEngine()).build();
// work with the client
client.close();
Ресурсы