所以,從HttpURLConnection類移動到HttpsURLConnection的
我現在看到的Java SE 8的應用程序時保持認證相關的數據。
平臺:IntelliJ和Mac OS。
我使用NTLM
身份驗證模式在其主頁上使用Microsoft SharePoint
Web應用程序進行身份驗證。我通過使用核心Java網絡API來做到這一點。我嘗試了其他庫,例如Apache,但是不知何故,只有核心Java方法才能成功驗證。
好了,就到這裏吧授權碼,其工作方式:
CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));
final String authHost = "http://domainSample.com/one/two";
Authenticator.setDefault(new Authenticator() {
@Override
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(
clientAuth.getUserAdmin() , clientAuth.getPassword().toCharArray());
}
});
URL URLAuth = new URL(authHost);
HttpURLConnection conn = (HttpURLConnection) URLAuth.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "*/*");
conn.setUseCaches(false);
conn.connect();
的conn
對象上的標題上回應:
{null=[HTTP/1.1 200 OK], SPIisLatency=[0], Server=[Microsoft-IIS/8.5], X-Content-Type-Options=[nosniff], Persistent-Auth=[true], Last-Modified=[Tue, 27 Jun 2017 16:37:41 GMT], X-FRAME-OPTIONS=[SAMEORIGIN], request-id=[74c9ff9d-4d14-0038-1c59-424a812a2885], Date=[Tue, 27 Jun 2017 16:37:40 GMT], MicrosoftSharePointTeamServices=[15.0.0.4911], X-MS-InvokeApp=[1; RequireReadOnly], SPRequestGuid=[74c9ff9d-4d14-0038-1c59-424a812a2885], Cache-Control=[private, max-age=0], SPRequestDuration=[94], X-AspNet-Version=[4.0.30319], Expires=[Mon, 12 Jun 2017 16:37:41 GMT], Content-Length=[161234], X-Powered-By=[ASP.NET], X-SharePointHealthScore=[0], Content-Type=[text/html; charset=utf-8]}
現在上面的代碼驗證的應用程序,客戶端,用遠程系統。現在我想與同一系統上的REST類型服務進行通信,以便獲得對服務請求的響應。
的URL變成這樣:
final String urlService = "https://domainSample.com/api/birds/getAllBirds";
相關的代碼是在這裏:
URL URLService = new URL(urlService);
HttpsURLConnection conns = (HttpsURLConnection)URLService.openConnection();
conns.setDoOutput(true);
conns.setDoInput(true);
conns.setRequestMethod("POST");
conns.setRequestProperty("Accept", "*/*");
conns.setChunkedStreamingMode(0);
conns.connect();
很顯然,我得到了響應:
HTTP 401 : Unauthorized
因爲我是在一個新的連接對象,現在基於HTTPS。
系統使用自定義安全證書,我在JRE上的密鑰庫中添加了該證書。
所以,我想保留身份驗證數據並將其傳輸到HttpsURLConnection對象上。以便在流程開始時執行認證,然後繼續在實際服務系統上進行多次呼叫。
現在,當您查看響應成功身份驗證(HTTP 200)的標頭時,我發現沒有任何用處,可以在這種用例中重用。例如,我甚至沒有收到Cookie
。
我試過URLConnection
,而不是在認證HttpURLConnection
對象,但沒有餅乾進來。 我會使用Cookie的培訓相關鍵值對,以確定自己是已經認證並與每個後續請求傳遞下去。
當談到頭響應,他們已經得到的東西叫做:
- 請求ID
- SPRequestGuid
看起來像唯一標識符,它確實沒有好他們傳遞與隨後的請求一起。
所以,
你怎麼看待它?