У нас есть забавная ситуация, когда базовый HTTP-запрос GET не проходит авторизацию Windows NTLM на сервере IIS. В то же время у нас есть тот же код, запущенный в другой среде, которая успешно выполняется.
Когда мы повторяем запрос через браузер, он успешно выполняется.
Похоже, что код Java не отправляет правильную информацию авторизации с запросом. Мы пытаемся выяснить, как это может быть. Используемые классы из java.net
пакета.
Мы попытались переключить учетную запись на локальную систему, под которой Tomcat работает безуспешно.
Код настолько прост, насколько может быть:
public static String sendHttpRequest(String urlString, String method, boolean
disconnect) {
HttpURLConnection urlConnection = null;
String result = null;
try {
URL url = new URL(urlString);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.addRequestProperty("Content-Length", "0");
urlConnection.setRequestMethod(method);
urlConnection.setUseCaches(false);
StringBuilder sb = new StringBuilder();
try (InputStream is = urlConnection.getInputStream()) {
InputStream buffer = new BufferedInputStream(is);
Reader reader = new InputStreamReader(buffer, "UTF-8");
int c;
while ((c = reader.read()) != -1) {
sb.append((char) c);
}
}
int statusCode = urlConnection.getResponseCode();
if (statusCode < 200 || statusCode >= 300) {
} else
result = sb.toString();
} catch (IOException e) {
LOGGER.warning(e.getMessage());
} finally {
if (disconnect && urlConnection != null) {
urlConnection.disconnect();
}
}
return result;
}
Явные вопросы для ответа:
Как регистрировать / отслеживать / отлаживать информацию, используемую для аутентификации на стороне клиента? Любая подсказка будет оценена :)