新聞中心
今天我們將看一下 HTTP 基本認證。指北君將會講講它是如何工作的,并且一步步教大家如何使用。

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比淮濱網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式淮濱網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋淮濱地區(qū)。費用合理售后完善,10余年實體公司更值得信賴。
什么是 HTTP 基本認證
HTTP 基本認證是一種簡單的認證方法。客戶端可以通過用戶名和密碼進行認證。這些憑證以特定的格式在 Authorization HTTP Header 中發(fā)送。一般它以 Basic 關(guān)鍵字開始,后面是一個 base64 編碼的用戶名:密碼值。冒號字符在這里很重要。頭部應(yīng)該嚴格遵循這個格式。
例如,要用 javanorth 用戶名和 http 密碼進行認證,我們必須發(fā)送這個 Header。
Basic amF2YW5vcnRoOmh0dHA=
我們可以通過使用 base64 解碼器和檢查解碼的結(jié)果來驗證。
Java HttpClient
在 Java 9 中引入了一個新的 HttpClient 模塊,它在 Java 11 中得到了標準化。下面代碼部分指北君我將使用 Java 17,我們可以簡單地從 java.net.http 包中導(dǎo)入它,無需任何額外的配置或依賴。
讓我們從執(zhí)行一個簡單的GET請求開始,現(xiàn)在不需要任何認證。
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder().GET()
.uri(new URI("https://www.javanorth.cn/get")).build();
HttpResponseresponse = client.send(request, BodyHandlers.ofString());
logger.info("Status {}", response.statusCode());
- 首先,我們創(chuàng)建一個 HttpClient 對象,它可以用來執(zhí)行 HTTP 請求。
- 其次,我們使用構(gòu)建器設(shè)計模式創(chuàng)建一個 HttpRequest 對象。GET 方法設(shè)置請求的 HTTP 方法。uri 方法設(shè)置了我們想發(fā)送請求的 URL。
- 之后,我們使用我們的客戶端發(fā)送該請求。發(fā)送方法的第二個參數(shù)是一個響應(yīng)體處理程序。這告訴客戶端,我們想把響應(yīng)體當作一個字符串。
讓我們運行我們的應(yīng)用程序并檢查日志。輸出應(yīng)該是這樣的。
INFO cn.javanorth.httpclient.basicauthentication.HttpClientBasicAuthentication - Status 200
我們看到 HTTP 狀態(tài)是 200,意味著我們的請求是成功的。在這之后,讓我們看看我們?nèi)绾翁幚碚J證。
使用 HttpClient 認證器
在我們配置認證之前,我們需要一個URL來測試它。讓我們使用一個需要認證的Postman Echo端點。首先,將之前的URL改為這個,然后再次運行應(yīng)用程序。
HttpRequest request = HttpRequest.newBuilder().GET()
.uri(new URI("https://www.javanorth.cn/basic-auth")).build();
我們檢查一下日志,找找狀態(tài)代碼。這次我們收到 HTTP 狀態(tài) 401 "未授權(quán)"。這個響應(yīng)代碼意味著端點需要認證,但客戶端沒有發(fā)送任何憑證。
我們修改一下代碼,使其發(fā)送所需的認證數(shù)據(jù)。我們可以通過配置 HttpClient Builder 來做到這一點,我們的客戶端將使用我們設(shè)置的憑證。這個端點接收用戶名 "javanorth"和密碼 "password"。讓我們?yōu)槲覀兊目蛻舳颂砑右粋€認證器。
HttpClient client = HttpClient.newBuilder()
.authenticator(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("javanorth", "password".toCharArray());
}
})
.build();
讓我們再次運行該應(yīng)用程序?,F(xiàn)在請求成功了,我們收到HTTP狀態(tài)200。
使用 HTTP 頭文件進行認證
我們可以使用另一種方法來訪問需要認證的端點。我們從前面的章節(jié)中了解到授權(quán)頭是如何構(gòu)建的,所以我們可以手動設(shè)置其值。盡管這必須在每個請求中進行,而不是通過認證器設(shè)置一次。
我們刪除認證器,看看如何設(shè)置請求頭。我們需要使用base64編碼來構(gòu)建頭文件的值。
private static final String getBasicAuthenticationHeader(String username, String password) {
String valueToEncode = username + ":" + password;
return "Basic " + Base64.getEncoder().encodeToString(valueToEncode.getBytes());
}讓我們?yōu)槭跈?quán)頭設(shè)置這個值,并運行該應(yīng)用程序。
HttpRequest request = HttpRequest.newBuilder()
.GET()
.uri(new URI("https://www.javanorth.cn/basic-auth"))
.header("Authorization", getBasicAuthenticationHeader("postman", "password"))
.build();
我們的請求是成功的,這意味著我們正確地構(gòu)建和設(shè)置了頭信息值。
總結(jié)
在這個簡短的文章中,我們看到了什么是 HTTP 基本認證以及它如何工作。我們通過為Java HttpClient 設(shè)置一個認證器,使用了基本認證。另外我們使用了不同的方法,通過手動設(shè)置HTTP頭來進行認證。
當前名稱:談?wù)凧avaHTTP基本認證
網(wǎng)站地址:http://m.5511xx.com/article/dpdjigj.html


咨詢
建站咨詢
