Java WS Authenticator在多线程环境中

时间:2010-10-08 13:24:38

标签: java multithreading authentication sun

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

  1. 主题1 - 对用户1进行身份验证
  2. 主题2 - 对用户2进行身份验证
  3. 线程1 - 执行代码以下载用户1的消息
  4. 此时,系统将获取用户2的消息,而不是用户1的消息。

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

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

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

    如果有人有任何想法,即使是黑客目前也会这样做,我真的很感激,因为目前唯一的“整洁”解决方案是在主执行方法上放置synchronized对表现的戏剧性影响。

1 个答案:

答案 0 :(得分:7)

根据我的经验,最好的办法就是放弃内置的http支持并获取Apache's HttpClient

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