多线程环境中的Java WS-Authenticator

多线程环境中的Java WS-Authenticator,java,multithreading,authentication,sun,Java,Multithreading,Authentication,Sun,目前,我正在与Sun的类java.net.Authenticator中的一个bug作斗争。似乎Authenticator类有一个系统范围的静态Authenticator。这导致我的多线程应用程序出现以下问题 线程1-为用户1进行身份验证 线程2-为用户2进行身份验证 线程1-执行代码为用户1下载消息 此时,系统将获取用户2的消息,而不是用户1的消息 我试着寻找解决办法。许多人建议尝试以下代码: AuthCacheValue.setAuthCache(new AuthCacheImpl()); A

目前,我正在与Sun的类
java.net.Authenticator
中的一个bug作斗争。似乎
Authenticator
类有一个系统范围的静态
Authenticator
。这导致我的多线程应用程序出现以下问题

  • 线程1-为用户1进行身份验证
  • 线程2-为用户2进行身份验证
  • 线程1-执行代码为用户1下载消息
  • 此时,系统将获取用户2的消息,而不是用户1的消息

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

    AuthCacheValue.setAuthCache(new AuthCacheImpl());
    Authenticator.setDefault(exchangeAuthenticator);
    
    但是,这不适用于我,因为我的应用程序是多线程的(
    exchangeAuthenticator
    将始终设置为在最新线程中初始化的验证器)


    如果有人有任何想法,即使是黑客现在也可以,我真的很感激,因为目前唯一“整洁”的解决方案是在主执行方法上放置一个
    synchronized
    ,对性能有显著影响

    根据我的经验,您最好的选择是放弃内置的http支持并获得

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