大家好,我是北君。今天我们来看看HTTP基本身份验证。智备君会讲到它是如何工作的,一步步教你如何使用它。什么是HTTPBasicAuthenticationHTTPBasicAuthentication是一种简单的认证方式。客户端可以使用用户名和密码进行身份验证。这些凭据以特定格式在授权HTTP标头中发送。通常它以Basic关键字开头,后跟base64编码的用户名:密码值。冒号字符在这里很重要。标头应严格遵循此格式。例如,要使用javanorth用户名和http密码进行身份验证,我们必须发送此标头。BasicamF2YW5vcnRoOmh0dHA=我们可以通过使用base64解码器并检查解码结果来验证这一点。JavaHttpClient在Java9中引入了一个新的HttpClient模块,在Java11中进行了标准化。以下代码部分参考北君我将使用Java17,我们可以简单地从java.net.http包中导入它,无需任何额外的配置或依赖.让我们从执行一个简单的GET请求开始,目前不需要身份验证。HttpClientclient=HttpClient.newHttpClient();HttpRequestrequest=HttpRequest.newBuilder().GET().uri(newURI("https://www.javanorth.cn/get")).build();HttpResponseresponse=client.send(request,BodyHandlers.ofString());logger.info("状态{}",response.statusCode());首先,我们创建一个HttpClient对象,它可以用来执行HTTP请求。其次,我们使用构建器设计模式创建一个HttpRequest对象。GET方法设置请求的HTTP方法。uri方法设置我们要将请求发送到的URL。之后,我们使用我们的客户端发送该请求。send方法的第二个参数是响应主体处理程序。这告诉客户端我们要将响应主体视为字符串。让我们运行我们的应用程序并检查日志。输出应如下所示。INFOcn.javanorth.httpclient.basicauthentication.HttpClientBasicAuthentication-Status200我们看到HTTP状态是200,这意味着我们的请求是成功的。在此之后,让我们看看我们如何处理身份验证。使用HttpClientAuthenticator在我们配置身份验证之前,我们需要一个URL来测试它。让我们使用需要身份验证的PostmanEcho端点。首先,将之前的URL更改为这个,然后再次运行该应用程序。HttpRequestrequest=HttpRequest.newBuilder().GET().uri(newURI("https://www.javanorth.cn/basic-auth")).build();让我们检查日志中的状态代码。这次我们得到HTTP状态401“未授权”。此响应代码表示端点需要身份验证,但客户端未发送任何凭据。让我们修改代码,以便它发送所需的身份验证数据。我们可以通过配置我们的客户端将使用我们设置的凭据的HttpClientBuilder来做到这一点。此端点接受用户名“javanorth”和密码“password”。让我们为我们的客户端添加一个验证器。HttpClient客户端=HttpClient.newBuilder().authenticator(newAuthenticator(){@OverrideprotectedPasswordAuthenticationgetPasswordAuthentication(){returnnewPasswordAuthentication("javanorth","password".toCharArray());}}).build();让我们再次运行该应用程序。现在请求成功,我们收到HTTP状态200。使用HTTP标头进行身份验证我们可以使用另一种方法来访问需要身份验证的端点。我们从前面的章节中了解了Authorization标头是如何构建的,因此我们可以手动设置它的值。虽然这必须在每个请求上完成,而不是由身份验证器设置一次。让我们删除验证器并查看如何设置请求标头。我们需要使用base64编码来构建标头的值。privatestaticfinalStringgetBasicAuthenticationHeader(Stringusername,Stringpassword){StringvalueToEncode=username+":"+password;return"Basic"+Base64.getEncoder().encodeToString(valueToEncode.getBytes());}让我们为授权标头设置这个值,然后运行应用程序。HttpRequestrequest=HttpRequest.newBuilder().GET().uri(newURI("https://www.javanorth.cn/basic-auth")).header("授权",getBasicAuthenticationHeader("邮递员","密码“))。建造();我们的请求成功了,这意味着我们正确地构建和设置了标头值。总结在这篇简短的文章中,我们了解了什么是HTTP基本身份验证及其工作原理。我们通过为JavaHttpClient设置身份验证器来使用基本身份验证。此外,我们通过手动设置HTTP标头来使用不同的方法进行身份验证。