2012-05-25 3 views
1

В настоящее время я просматриваю веб-приложение и натолкнулся на интересное явление. Во время моих сеансов тестирования я собирал 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? Для меня это плохая ошибка.

ответ

1

Я думаю, что Java Network Documentation - лучший ресурс. Установка http.auth.preference="basic" должна дать вам то, что вы хотите. Предполагая, что вам не нужен дайджест или что-то еще. Я не уверен, что вы можете выйти за рамки этого, чтобы отключить NTLM.

Еще одна вещь, которую следует учитывать, - это другие реализации Java HTTP-клиента, такие как Apache или Google.

+0

Привет, Спасибо за ваш * очень * быстрый ответ. Я просто проверил настройки - к сожалению, это не решает мою проблему. Однако, спасибо вам большое! Я думаю, мне нужно будет заменить URLConnection на HttpClient из Apache -.-. Я хотел обойти это, потому что текущее решение так красиво быстро и грязно :) Спасибо за ваши усилия! –

0

Я не уверен, что это поможет, но я был потрясен противоположностью.

I хотел NTLM auth, чтобы иметь место, поэтому на моей локальной машине я использую бесплатное приложение CNTLM. Это локальный прокси-сервер, который будет отправлять входящие запросы (и NT auth). Хорошо для приложений, которые не могут использовать прокси-серверы NTLM.

Извините, я знаю, что это не отвечает на ваш вопрос, но, возможно, это окажется полезным для кого-то там! :)

+0

Эй, я использую Windows 7 здесь с JRE 1.6.0.22 и NTLM работает (к сожалению) как шарм. Вы можете попытаться использовать мой код, перевернутый выше ... возможно, это избавит вас от каких-либо проблем! –

+0

Я здесь, чтобы добавить третий опыт. Я нахожусь в Mac OS X, и Java, кажется, отвечает с помощью NTLM, но сервер отклоняет ответ, а затем предлагает NTLM и Basic в качестве альтернатив, что, конечно, вызывает бесконечный цикл. Должен любить Microsoft придерживаться веб-стандартов. :( – Trejkaz

Смежные вопросы