【问题标题】:Java WS Authenticator in a multi-threaded environment多线程环境中的 Java WS Authenticator
【发布时间】:2010-10-08 13:24:38
【问题描述】:

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

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

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

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

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

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

如果有人有任何想法,即使是 hack 目前也能做到,我真的很感激,因为目前唯一“整洁”的解决方案是在主要执行方法上放置一个 synchronized 以产生戏剧性的效果在性能上。

【问题讨论】:

    标签: java multithreading authentication sun


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-28
      • 2013-01-31
      • 2018-05-10
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多