Аутентификация прокси Java 6 NTLM и HTTPS - кто-либо заставил это работать?

Прибытие из встроенного мира...

Ваш код компилируется в три типа памяти:
1. .data: инициализированная память
2. .text: константы и код
3. .bss: неинициализированная память (инициализированный к 0 в C++, если не явно инициализированный)

Globals входит в .data, если инициализировано. Если не они размещаются в .bss и zero'ed в предосновном коде.

12
задан DavidK 25 August 2009 в 08:32
поделиться

2 ответа

Вы женаты на JAX-WS? Я использую Apache Axis2, который использует обычный httpclient и имеет встроенную аутентификацию NTLM.

Пример:

//Configure SOAP HTTP client to authenticate to server using NTLM
HttpTransportProperties.Authenticator auth = new HttpTransportProperties.Authenticator();

//TODO make report server credentials configurable
auth.setUsername("jdoe");
auth.setPassword("strongpass");
auth.setDomain("WINDOWSDOMAIN");
auth.setHost("host.mydomain.com");
auth.setPort(443);

Options o = new Options();
o.setProperty(org.apache.axis2.transport.http.HTTPConstants.AUTHENTICATE,auth);
myWebServiceStub._getServiceClient().setOptions(o);
4
ответ дан 2 December 2019 в 20:41
поделиться

После некоторой отладки это кажется недостатком в библиотеках классов JRE, особенно в sun.net.www.protocol.http.HttpURLConnection .

Изучение HTTP-запросы и ответы в случае конечных точек HTTP и HTTPS показали, что в случае успешного HTTP запросы имели заголовок Proxy-Connection = keep-alive , который отсутствовал в случае отказа HTTPS. В более общем плане, кажется, есть некоторая путаница в том, следует ли использовать «Прокси-соединение» или просто «Соединение» ...

В любом случае, примечательно, что в случае HTTP код проходит через HttpURLConnection.writeRequests () , который содержит следующий фрагмент кода

    /*
     * For HTTP/1.1 the default behavior is to keep connections alive.
     * However, we may be talking to a 1.0 server so we should set
     * keep-alive just in case, except if we have encountered an error
     * or if keep alive is disabled via a system property
     */

    // Try keep-alive only on first attempt
    if (!failedOnce && http.getHttpKeepAliveSet()) {
    if (http.usingProxy) {
        requests.setIfNotSet("Proxy-Connection", "keep-alive");
    } else {
        requests.setIfNotSet("Connection", "keep-alive");
    }

. При создании туннеля через прокси для HTTPS такого кода нет, что заставляет Squid расстраиваться во время разговора об аутентификации NTLM.

Чтобы обойти это, в HttpURLConnection.sendCONNECTRequest () я добавил

if (http.getHttpKeepAliveSet()) {
    if (http.usingProxy) {
        requests.setIfNotSet("Proxy-Connection", "keep-alive");
    }
}

непосредственно перед

setPreemptiveProxyAuthentication(requests);
http.writeRequests(requests, null);

Я ввожу свой измененный HttpURLConnection.class в JRE с помощью флага «-Xbootclasspath / p», и теперь он работает! Не совсем элегантно, но вот мы.

11
ответ дан 2 December 2019 в 20:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: