如何在多线程HTTPClient环境中使用基本身份验证?

时间:2012-02-27 18:16:57

标签: java multithreading thread-safety httpclient

我正在尝试使用HTTPClient将大量请求发布到使用基本身份验证保护的Web服务。虽然我使用的是ThreadSafeClientConnManager,但Apache HTTPClient的基本身份验证实现似乎不是线程安全的。有时请求标头不包含授权元素,导致401。 有多种线程使用基本身份验证的常用方法或最佳实践吗?

2 个答案:

答案 0 :(得分:1)

您确定这是线程安全问题吗?如果您使用的是java.net.Authenticator,它会缓存名称/密码,除非您这样做:

AuthCacheValue.setAuthCache(new AuthCacheImpl());

AuthCacheValue和AuthCacheImpl来自sun.net.www.protocol.http。我在扩展Authenticator

的类的构造函数中执行此操作

答案 1 :(得分:1)

我最近遇到了同样的问题。 存在此问题:https://issues.apache.org/jira/browse/HTTPCLIENT-1168 你有两个选择:

  1. 为每个线程或请求创建一个HttpContext
  2. 使用SyncBasicHttpContext,这是一个线程安全的实现