2010-10-08 45 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實例。這樣每個線程都可以檢索它自己的值。