Java 使用HttpClient和Cookie进行抢占式基本身份验证

Java 使用HttpClient和Cookie进行抢占式基本身份验证,java,apache-httpcomponents,big-ip,Java,Apache Httpcomponents,Big Ip,我正在尝试使用HttpClientContext设置预先基本身份验证。我在下面描述的功能是利用JWT令牌和F5/BigIP进行应用程序和服务身份验证和授权的更大解决方案的一部分 通过成功的curl命令和网络跟踪,我可以看到以下工作流: 获取发送到URL的请求 在BigIP实例上找到302 重定向到my.policy->创建了两个会话cookie(LastMRH_会话和MRHSession) 获取有关我的策略的请求 401未经授权发送回->使用新值更新MRHSession cookie 在命令提示

我正在尝试使用HttpClientContext设置预先基本身份验证。我在下面描述的功能是利用JWT令牌和F5/BigIP进行应用程序和服务身份验证和授权的更大解决方案的一部分

通过成功的curl命令和网络跟踪,我可以看到以下工作流:

  • 获取发送到URL的请求
  • 在BigIP实例上找到302
  • 重定向到my.policy->创建了两个会话cookie(LastMRH_会话和MRHSession)
  • 获取有关我的策略的请求
  • 401未经授权发送回->使用新值更新MRHSession cookie
  • 在命令提示下输入凭据
  • 获取发送到my.policy的请求,并在#5中添加更新的MRHSession cookie和授权标头
  • 成功重定向
  • 我用Java代码创建了一个客户机上下文,一切都很好,除了它总是使用原始的MRHSession cookie,并且不拾取401上返回的新会话cookie值(即,它在#7中发送原始会话cookie,而不是从#5中发送的更新会话cookie),F5抱怨会话ID无效

    下面是我正在使用的http组件版本的gradle参考:

    compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.3.4'
    
    客户端上下文创建如下所示:

    public HttpClientContext create(final URI uri) {
       HttpHost httpHost = httpHostFactory.create(uri);
       HttpClientContext context = HttpClientContext.create();
       context.setAuthCache(authCacheFactory.create(httpHost));
    context.setCredentialsProvider(credentialsProviderFactory.create(httpHost));       
        return context;
    }