自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

談?wù)?Java HTTP 基本認(rèn)證

開發(fā) 前端
我們看到了什么是 HTTP 基本認(rèn)證以及它如何工作。我們通過為Java HttpClient 設(shè)置一個(gè)認(rèn)證器,使用了基本認(rèn)證。另外我們使用了不同的方法,通過手動(dòng)設(shè)置HTTP頭來進(jìn)行認(rèn)證。

大家好,我是指北君。

今天我們將看一下 HTTP 基本認(rèn)證。指北君將會(huì)講講它是如何工作的,并且一步步教大家如何使用。

什么是 HTTP 基本認(rèn)證

HTTP 基本認(rèn)證是一種簡(jiǎn)單的認(rèn)證方法??蛻舳丝梢酝ㄟ^用戶名和密碼進(jìn)行認(rèn)證。這些憑證以特定的格式在 Authorization HTTP Header 中發(fā)送。一般它以 Basic 關(guān)鍵字開始,后面是一個(gè) base64 編碼的用戶名:密碼值。冒號(hào)字符在這里很重要。頭部應(yīng)該嚴(yán)格遵循這個(gè)格式。

例如,要用 javanorth 用戶名和 http 密碼進(jìn)行認(rèn)證,我們必須發(fā)送這個(gè) Header。

Basic amF2YW5vcnRoOmh0dHA=

我們可以通過使用 base64 解碼器和檢查解碼的結(jié)果來驗(yàn)證。

Java HttpClient

在 Java 9 中引入了一個(gè)新的 HttpClient 模塊,它在 Java 11 中得到了標(biāo)準(zhǔn)化。下面代碼部分指北君我將使用 Java 17,我們可以簡(jiǎn)單地從 java.net.http 包中導(dǎo)入它,無需任何額外的配置或依賴。

讓我們從執(zhí)行一個(gè)簡(jiǎn)單的GET請(qǐng)求開始,現(xiàn)在不需要任何認(rèn)證。

HttpClient client = HttpClient.newHttpClient();

HttpRequest request = HttpRequest.newBuilder().GET()
.uri(new URI("https://www.javanorth.cn/get")).build();

HttpResponse<String> response = client.send(request, BodyHandlers.ofString());

logger.info("Status {}", response.statusCode());
  • 首先,我們創(chuàng)建一個(gè) HttpClient 對(duì)象,它可以用來執(zhí)行 HTTP 請(qǐng)求。
  • 其次,我們使用構(gòu)建器設(shè)計(jì)模式創(chuàng)建一個(gè) HttpRequest 對(duì)象。GET 方法設(shè)置請(qǐng)求的 HTTP 方法。uri 方法設(shè)置了我們想發(fā)送請(qǐng)求的 URL。
  • 之后,我們使用我們的客戶端發(fā)送該請(qǐng)求。發(fā)送方法的第二個(gè)參數(shù)是一個(gè)響應(yīng)體處理程序。這告訴客戶端,我們想把響應(yīng)體當(dāng)作一個(gè)字符串。

讓我們運(yùn)行我們的應(yīng)用程序并檢查日志。輸出應(yīng)該是這樣的。

INFO cn.javanorth.httpclient.basicauthentication.HttpClientBasicAuthentication - Status 200

我們看到 HTTP 狀態(tài)是 200,意味著我們的請(qǐng)求是成功的。在這之后,讓我們看看我們?nèi)绾翁幚碚J(rèn)證。

使用 HttpClient 認(rèn)證器

在我們配置認(rèn)證之前,我們需要一個(gè)URL來測(cè)試它。讓我們使用一個(gè)需要認(rèn)證的Postman Echo端點(diǎn)。首先,將之前的URL改為這個(gè),然后再次運(yùn)行應(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)"。這個(gè)響應(yīng)代碼意味著端點(diǎn)需要認(rèn)證,但客戶端沒有發(fā)送任何憑證。

我們修改一下代碼,使其發(fā)送所需的認(rèn)證數(shù)據(jù)。我們可以通過配置 HttpClient Builder 來做到這一點(diǎn),我們的客戶端將使用我們?cè)O(shè)置的憑證。這個(gè)端點(diǎn)接收用戶名 "javanorth"和密碼 "password"。讓我們?yōu)槲覀兊目蛻舳颂砑右粋€(gè)認(rèn)證器。

HttpClient client = HttpClient.newBuilder()
.authenticator(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("javanorth", "password".toCharArray());
}
})
.build();

讓我們?cè)俅芜\(yùn)行該應(yīng)用程序?,F(xiàn)在請(qǐng)求成功了,我們收到HTTP狀態(tài)200。

使用 HTTP 頭文件進(jìn)行認(rèn)證

我們可以使用另一種方法來訪問需要認(rèn)證的端點(diǎn)。我們從前面的章節(jié)中了解到授權(quán)頭是如何構(gòu)建的,所以我們可以手動(dòng)設(shè)置其值。盡管這必須在每個(gè)請(qǐng)求中進(jìn)行,而不是通過認(rèn)證器設(shè)置一次。

我們刪除認(rèn)證器,看看如何設(shè)置請(qǐng)求頭。我們需要使用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è)置這個(gè)值,并運(yùn)行該應(yīng)用程序。

HttpRequest request = HttpRequest.newBuilder()
.GET()
.uri(new URI("https://www.javanorth.cn/basic-auth"))
.header("Authorization", getBasicAuthenticationHeader("postman", "password"))
.build();

我們的請(qǐng)求是成功的,這意味著我們正確地構(gòu)建和設(shè)置了頭信息值。

總結(jié)

在這個(gè)簡(jiǎn)短的文章中,我們看到了什么是 HTTP 基本認(rèn)證以及它如何工作。我們通過為Java HttpClient 設(shè)置一個(gè)認(rèn)證器,使用了基本認(rèn)證。另外我們使用了不同的方法,通過手動(dòng)設(shè)置HTTP頭來進(jìn)行認(rèn)證。

責(zé)任編輯:武曉燕 來源: Java技術(shù)指北
相關(guān)推薦

2020-09-25 11:50:12

前后端分離架構(gòu)Web

2010-06-08 12:31:15

HTTP協(xié)議實(shí)體

2010-03-03 16:40:55

Python HTTP

2011-04-20 10:32:44

java反編譯

2019-04-16 10:05:11

2023-04-19 07:39:55

RustHTTP服務(wù)器

2022-06-07 08:31:44

JavaUnsafe

2022-01-07 18:53:51

元素服務(wù)端數(shù)據(jù)

2019-12-16 09:21:14

HTTPAPI認(rèn)證

2009-09-24 09:55:15

Java Hibern

2024-08-23 09:02:56

2009-10-10 16:57:33

布線工藝要求

2018-04-17 16:29:24

Java面試HTTP

2011-06-17 17:37:16

JavaSQL Server

2009-10-27 14:25:08

2009-06-09 12:58:07

華為Portal認(rèn)證WX3024

2012-02-08 10:12:19

Java反射

2012-03-26 11:32:45

Java

2014-09-26 09:24:32

HTTP

2020-04-10 10:22:12

Java判空編程語言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)