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