我正在嘗試在 java spring mvc 中對 api 進行身份驗證。
只是我的連接有問題,特別是當我設定 setRequestProperty("Authorization", "***"); 總是回傳 401 錯誤我有什么問題嗎??
try {
URL url = new URL("https://account.api.here.com/oauth2/token");
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Authorization", "OAuth oauth_consumer_key=\"*******************\",oauth_signature_method=\"HMAC-SHA256\",oauth_timestamp=\"1633463792\",oauth_nonce=\"******\",oauth_version=\"1.0\",oauth_signature=\"**************\"");
// conn.setRequestProperty("Authorization", "OAuth");
// conn.setRequestProperty("oauth_consumer_key", "*******************");
// conn.setRequestProperty("oauth_nonce", "********");
// conn.setRequestProperty("oauth_signature", "*******");
// conn.setRequestProperty("oauth_signature_method", "HMAC-SHA256");
// conn.setRequestProperty("oauth_timestamp", "1633463792");
// conn.setRequestProperty("oauth_version", "1.0");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setDoOutput(true);
OutputStream os = conn.getOutputStream();
os.write(POST_PARAMS.getBytes());
os.flush();
os.close();
int responseCode = conn.getResponseCode();
return conn.getRequestMethod() os "\n" responseCode "\nContent-type:" conn.getRequestProperty("Content-Type") "\nAuthorization: " conn.getRequestProperty("Authorization");
}catch (Exception e){
e.printStackTrace();
}
當我打電話給郵遞員回傳時,它看起來像這樣 為什么總是為空?
POSTgrant_type=client_credentials 401 內容型別:應用程式/x-www-form-urlencoded 授權:空

uj5u.com熱心網友回復:
我不能說為什么使用 Here API 的身份驗證不起作用,但我可以解釋為什么你在輸出中得到null了Authorization。
原因是HttpURLConnectionJDK 中類的實作明確拒絕回傳安全敏感標頭的值。
如果您查看該getRequestProperty()方法(在撰寫本文時,這是在sun.net.www.protocol.http.HttpURLConnection 中的第 3367 行附近),那么您將看到該方法檢查給定的標頭是否為安全敏感標頭的數量,如果是,則null無論是否為此標頭設定了值都回傳。Authorization確實是被視為安全敏感的標頭之一。
如果你想證明Authorizationheader的值已經設定好了,可以嘗試如下操作:
java.lang.reflect.Field requestsField = conn.getClass().getDeclaredField("requests");
requestsField.setAccessible(true);
System.out.println(requestsField.get(conn));
對我來說,這列印了類似的內容sun.net.www.MessageHeader@52a863563 pairs: {Authorization=...}...,表明Authorization標題確實已設定。但是請注意,這段代碼是令人討厭的反射性黑客,雖然它對我來說適用于 JDK 11,但我不保證它適用于其他版本的 Java。
總之,我相信您正在設定授權標頭。您可能將其設定為不正確的值,但恐怕我無法幫助您將其設定為作業值,因為我無法訪問 Here API,而且我自己也從未使用過它。我建議從這里尋求支持。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/398986.html
上一篇:列名在springboot中無效
