В настоящее время я просматриваю веб-приложение и натолкнулся на интересное явление. Во время моих сеансов тестирования я собирал URL-адреса с помощью прокси-сервера. Теперь я хотел проверить мой список URL для анонимного доступа, поэтому я написал этот маленький инструментПодавить NTLM Auth в Java
public static void main(String[] args) {
try {
TrustAllCerts.disableCertChecks();
FileReader fr = new FileReader(new File("urls.txt"));
BufferedReader br = new BufferedReader(fr);
String urlStr = br.readLine();
while (urlStr != null) {
if (urlStr.trim().length() > 0) {
URL url = new URL(urlStr);
HttpsURLConnection urlc = (HttpsURLConnection) url.openConnection();
urlc.connect();
if (urlc.getResponseCode() == HttpURLConnection.HTTP_OK) {
System.out.println(urlStr);
} else {
System.out.println("["+urlc.getResponseCode()+"] "+urlStr);
}
urlc.disconnect();
}
urlStr = br.readLine();
}
br.close();
} catch (Exception e) {
e.printStackTrace();
}
}
Это не делает в принципе ничего, но открывая соединение URL на данном URL и проверить код ответа HTTP (на самом деле я осуществил некоторые больше тестов, если я перенаправляюсь на страницу входа). Однако проблема заключается в том, что это конкретное приложение (некоторые пользовательские службы отчетов MS SQL Server) настроено на использование аутентификации NTLM WWW. Если я попытаюсь получить доступ к некоторым URL-адресам с помощью Firefox, я получаю 401 Unauthorized + login dlg. Internet Exploder выполняет NTLM auth в фоновом режиме и предоставляет доступ. Кажется, что класс Java URLConnection (или URL) делает то же самое, потому что у меня нет 401. Есть ли способ отключить неявную аутентификацию NTLM в Java? Для меня это плохая ошибка.
Привет, Спасибо за ваш * очень * быстрый ответ. Я просто проверил настройки - к сожалению, это не решает мою проблему. Однако, спасибо вам большое! Я думаю, мне нужно будет заменить URLConnection на HttpClient из Apache -.-. Я хотел обойти это, потому что текущее решение так красиво быстро и грязно :) Спасибо за ваши усилия! –