Я пытаюсь сделать вызов клиента Джерси с помощью прокси-сервера NTLM? возможно, поскольку я не смог получить четкую информацию об этом. Кто-нибудь пытался раньше?Поддерживает ли клиентскую службу в Джерси прокси-сервер NTLM
3
A
ответ
3
Да, можно настроить Jersey Client на подключение через прокси-сервер, для которого требуется аутентификация NTLM.
Вот упрощенный фрагмент кода, который готовит соответствующий ClientConfig
, который должен работать с Джерси v2.5 +:
final ClientConfig config = new ClientConfig();
config.property(ClientProperties.PROXY_URI, "http://myproxy.com:8000");
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
final AuthScope ntlmAuthScope =
new AuthScope("myproxy.com", 8000, AuthScope.ANY_REALM, "NTLM");
credentialsProvider.setCredentials(
ntlmAuthScope,
new NTCredentials("user", "password", "hostname", "domain"));
config.property(
ApacheClientProperties.CREDENTIALS_PROVIDER, credentialsProvider);
config.connectorProvider(new ApacheConnectorProvider());
Client client = ClientBuilder.newClient(config);
Обратите внимание: я использую HttpClient разъем Apache с Клиентом Джерси - вам может потребоваться несколько другой код, если вы используете another client transport connector.
Вы также можете добавить следующую строку в ваш код, если вы хотите, чтобы ваши запросы POST/PUT быть помещены в буфер (и, следовательно, повторяемые) в ответ на любые 407 задач аутентификации, которые возвращаются из вашего прокси-сервера:
config.property(ClientProperties.REQUEST_ENTITY_PROCESSING,
RequestEntityProcessing.BUFFERED);
Я попробовал предложенное решение, но если я пост вида:.. client.target (...) запрос() пост (...) нет заголовка «Authorization» не привязывается к моему запрос. Я делаю что-то неправильно? – finrod