2

我有几个服务器具有不同的身份验证类型。基本的NTLM。我需要机制来自动选择它。我发现,在尝试使用每种凭证类型并选择成功的情况下。我在http客户端4.3中找到了一些方法,名为impl.client.HttpClientBuilder#setDefaultAuthSchemeRegistry,但是多重身份验证方法Apache HTTP客户端4.3+

  1. 我不知道如何使用它。
  2. 第二个问题,我如何控制auth方法的优先级。因为我想确定哪个方法适用于我应该使用的url,然后希望从上次请求的成功方法开始。

PS至于现在我有可行的实现每种类型的身份验证。

回答

1

人们可以使用RequestConfig

RequestConfig requestConfig = RequestConfig.custom() 
     .setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC)) 
     .setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.DIGEST)) 
     .build(); 

本地执行上下文包含关于请求执行包括对目标和代理主机

CloseableHttpClient httpclient = HttpClients.createDefault(); 
try { 
    HttpClientContext localContext = HttpClientContext.create(); 
    HttpGet httpget = new HttpGet("http://localhost/"); 
    CloseableHttpResponse response = httpclient.execute(httpget, localContext); 
    try { 
     System.out.println(response.getStatusLine()); 
     EntityUtils.consume(response.getEntity()); 
     AuthState targetAuthState = localContext.getTargetAuthState(); 
     if (targetAuthState.getAuthScheme() != null) { 
      System.out.println("Target auth scheme: " + 
        targetAuthState.getAuthScheme().getSchemeName()); 
     } 
     AuthState proxyAuthState = localContext.getProxyAuthState(); 
     if (proxyAuthState.getAuthScheme() != null) { 
      System.out.println("Proxy auth scheme: " + 
        proxyAuthState.getAuthScheme().getSchemeName()); 
     } 

    } finally { 
     response.close(); 
    } 
} finally { 
    httpclient.close(); 
} 
+0

确定AUTH状态的所有细节配置基于每个请求基础优选AUTH方案,我如何才能获得最后一个成功的计划名称? –

+1

一个通常应该没有必要这样做。 HttpClient自动重新使用最后一次已知的成功认证方案_provided_请求共享相同的执行上下文 – oleg