2010-10-08 43 views
4

目前我正与Sun的java.net.Authenticator类的错误挣扎。看来Authenticator类具有全系统静态Authenticator。这在我的多线程应用程序中导致以下问题。Java的WS验证器在多线程环境

  1. 线程1 - 进行身份验证对用户1
  2. 线程2 - 进行身份验证对用户2
  3. 线程1 - 执行代码,以下载邮件用户1

在这点上,系统将获得用户2的消息,而不是消息用户1

我试图寻找解决的办法。许多建议尝试以下代码:

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

然而,这不适合我,因为我的应用程序是多线程(exchangeAuthenticator总是被设置为最新的线程初始化认证)工作。

如果任何人有任何想法,即使是黑客现在也会做,我真的很感激,因为目前唯一的'整洁'解决方案是在主执行方法上放置一个​​,性能。

回答

6

根据我的经验,最好的办法是抛弃内置的HTTP支持,并得到Apache's HttpClient

如果这不是一个选项,创建扩展身份验证一个对象,但用户名和密码存储在ThreadLocal实例。这样每个线程都可以检索它自己的值。