Java WS Authenticator在多线程环境中

Kro*_*ros 4 java authentication multithreading sun

目前我正在努力解决Sun课堂上的一个错误java.net.Authenticator.似乎Authenticator该类具有系统范围的静态Authenticator.这导致我的多线程应用程序中出现以下问题.

  1. 线程1 - 对用户1进行身份验证
  2. 线程2 - 为用户2进行身份验证
  3. 线程1 - 执行代码以下载用户1的消息

此时,系统将获取用户2的消息,而不是用户1的消息.

我试过寻找解决方案.许多人建议尝试以下代码:

AuthCacheValue.setAuthCache(new AuthCacheImpl());
Authenticator.setDefault(exchangeAuthenticator);
Run Code Online (Sandbox Code Playgroud)

但是,这对我来说不起作用,因为我的应用程序是多线程的(exchangeAuthenticator将始终设置为在最新线程中初始化的身份验证器).

如果有人有任何想法,即使是黑客目前也会做,我真的很感激,因为目前唯一的"整洁"解决方案是synchronized在主要的执行方法上放置一个对性能产生巨大影响的方法.

Dev*_*ler 7

根据我的经验,你最好的办法是放弃内置的http支持并获得Apache的HttpClient.

如果这不是一个选项,请创建一个扩展Authenticator的单个对象,但将用户名和密码存储在ThreadLocal实例中.这样每个线程都可以检索它自己的值.