2010-02-05 4 views
4

Когда я обращаюсь к HTTP-серверу с использованием стандартного Java API (java.net.URLConnection), учетные данные «кэшируются» после первой успешной аутентификации , а последующие вызовы Authenticator.setDefault() не действуют. Поэтому мне нужно перезапустить приложение, чтобы использовать разные учетные данные.Не удается выполнить аутентификацию с помощью разных учетных данных NTLM за один сеанс с помощью java.net.URLConnection

Я не наблюдаю этого эффекта при использовании базовой аутентификации. Но мне нужно использовать NTLM для сервера, к которому я обращаюсь, и Jakarta Commons HttpClient не является альтернативой либо потому, что он не поддерживает NTLMv2 (см. http://oaklandsoftware.com/papers/ntlm.html)

Глядя на пакеты с использованием Wireshark, я также наблюдаю что перед первой успешной аутентификацией сначала выполняется аутентификация с текущими учетными данными Windows. Но после успешной аутентификации используются только сохраненные учетные данные.

Есть ли способ сбросить или изменить учетные данные java.net. Аутентификатор использует после успешной проверки подлинности NTLM?

+0

ndn, Не могли бы вы найти что-нибудь на этом? Облицовка подобных проблем при реализации прокси-сервера, которому нужны разные подключения для использования разных учетных данных. Там должна быть настройка где-то, где указано «не использовать учетные данные системы/пользователя по умолчанию». Я буду держать вас в курсе, если найду что-нибудь. –

+1

http://java.sun.com/javase/6/docs/technotes/guides/net/http-auth.html говорит «На платформах Microsoft Windows аутентификация NTLM пытается получить учетные данные пользователя из системы без запроса объект аутентификатора пользователя. Если эти учетные данные не принимаются сервером, тогда будет вызван аутентификатор пользователя ». – ndeuma

ответ

3

Неа

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6626700

указывает, что это выдающийся ошибка. Автор там предлагает некоторую неприятную магию отражения, чтобы преодолеть это. Это нормально, если это внутренне и документировано как хрупкое и потенциально ломающееся. Конечно, не очень хорошо