Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在多线程HTTPClient环境中使用基本身份验证?_Java_Multithreading_Thread Safety_Httpclient - Fatal编程技术网

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

Java 如何在多线程HTTPClient环境中使用基本身份验证?,java,multithreading,thread-safety,httpclient,Java,Multithreading,Thread Safety,Httpclient,我正在尝试使用HTTPClient将大量请求发布到使用基本身份验证进行保护的Web服务。虽然我使用的是ThreadSafeClientConnManager,但Apache HTTPClient的基本身份验证实现似乎不是线程安全的。有时,请求标头不包含authorization元素,这会导致401。 对多线程使用基本身份验证是否有一种通用方法或最佳实践 您确定这是线程安全问题吗?如果您使用的是java.net.Authenticator,它会缓存名称/密码,除非您执行以下操作: AuthCach

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

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

AuthCacheValue.setAuthCache(new AuthCacheImpl());

AuthCacheValue和AuthCacheImpl来自sun.net.www.protocol.http。我在扩展Authenticator的类的构造函数中这样做,我最近遇到了同样的问题。 有一个记录的问题: 你似乎有两个选择:

  • 为每个线程或请求创建HttpContext
  • 使用SyncBasicHttpContext,它是线程安全的实现

  • 当您说基本身份验证时,您是在说用户名/密码、登录并获取会话令牌,并且您可以在后续请求中重用该会话令牌吗?如果是这样的话,我看不出多线程是如何破坏事情的。因为在您发出后续请求之前,您不会有会话ID。是的,我说的是普通的基本访问身份验证。共享相同的http上下文时似乎有问题。