Java 如何在多线程HTTPClient环境中使用基本身份验证?
我正在尝试使用HTTPClient将大量请求发布到使用基本身份验证进行保护的Web服务。虽然我使用的是ThreadSafeClientConnManager,但Apache HTTPClient的基本身份验证实现似乎不是线程安全的。有时,请求标头不包含authorization元素,这会导致401。Java 如何在多线程HTTPClient环境中使用基本身份验证?,java,multithreading,thread-safety,httpclient,Java,Multithreading,Thread Safety,Httpclient,我正在尝试使用HTTPClient将大量请求发布到使用基本身份验证进行保护的Web服务。虽然我使用的是ThreadSafeClientConnManager,但Apache HTTPClient的基本身份验证实现似乎不是线程安全的。有时,请求标头不包含authorization元素,这会导致401。 对多线程使用基本身份验证是否有一种通用方法或最佳实践 您确定这是线程安全问题吗?如果您使用的是java.net.Authenticator,它会缓存名称/密码,除非您执行以下操作: AuthCach
对多线程使用基本身份验证是否有一种通用方法或最佳实践 您确定这是线程安全问题吗?如果您使用的是java.net.Authenticator,它会缓存名称/密码,除非您执行以下操作:
AuthCacheValue.setAuthCache(new AuthCacheImpl());
AuthCacheValue和AuthCacheImpl来自sun.net.www.protocol.http。我在扩展Authenticator的类的构造函数中这样做,我最近遇到了同样的问题。 有一个记录的问题: 你似乎有两个选择:
当您说基本身份验证时,您是在说用户名/密码、登录并获取会话令牌,并且您可以在后续请求中重用该会话令牌吗?如果是这样的话,我看不出多线程是如何破坏事情的。因为在您发出后续请求之前,您不会有会话ID。是的,我说的是普通的基本访问身份验证。共享相同的http上下文时似乎有问题。