Java WS Authenticator в многопоточной среде - PullRequest
4 голосов
/ 08 октября 2010

В данный момент я борюсь с ошибкой в ​​классе Sun java.net.Authenticator.Кажется, что класс Authenticator имеет общесистемную статическую Authenticator.Это приводит к следующей проблеме в моем многопоточном приложении.

  1. Тема 1 - Аутентификации для пользователя 1
  2. Тема 2 - Аутентификации для пользователя 2
  3. Тема 1- Выполняет код для загрузки сообщений для пользователя 1

. В этот момент система получит сообщения для пользователя 2 вместо сообщений для пользователя 1.

Я попытался выполнить поискдля решения.Многие предлагали попробовать следующий код:

AuthCacheValue.setAuthCache(new AuthCacheImpl());
Authenticator.setDefault(exchangeAuthenticator);

Однако это не работает для меня, так как мое приложение является многопоточным (exchangeAuthenticator всегда будет установлен на аутентификатор, инициализированный в последнем потоке).

Если у кого-то есть идея, даже хак на данный момент подойдет, я был бы очень признателен, поскольку на данный момент единственное «аккуратное» решение - это поместить synchronized в основной метод выполнения с помощьюдраматическое влияние на производительность.

1 Ответ

7 голосов
/ 08 октября 2010

По моему опыту, лучше всего отказаться от встроенной поддержки http и получить HttpClient Apache .

Если это не вариант, создайте один объект, расширяющий Authenticator, но сохранитеимя пользователя и пароль в ThreadLocal экземплярах.Таким образом, каждый поток может получить свои собственные значения.

...