网站首页 > java教程 正文
.
介绍
在本系列的第一部分(链接此处)中,介绍了 java http 客户端 API 的基本功能。现在我们将探讨当今应用程序中广泛使用的一些更常见的用例。
我们将学习如何通过提供凭据来访问安全端点。
基本认证
基本身份验证是保护 Internet 上的 Web 资源的一种简单方法。其工作原理如下:
- 客户端想要通过 HTTP 访问受保护的资源并提供用户名/密码。凭证在授权 HTTP 标头中发送。格式很重要,必须完全如下所示:基本凭据,其中凭据是用户名:密码的 Base64 编码。请注意用户名和密码之间的单个冒号。
- Web 服务器接收 HTTP 请求,从标头中提取编码的凭据并进行验证。如果不匹配,通常会返回401状态码(未经授权的错误)。如果匹配,将允许访问。
现在我们知道了理论,让我们将其付诸实践。由于 Spring Security 模块,我们在前面的文章中使用的端点现在得到了保护(这将是以后的文章,敬请关注!)。当尝试通过执行以下代码获取客户列表时
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http://localhost:8080/api/v1/customers"))
.GET()
.build();
HttpResponse<String> response = client
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.printf("Status %s \n", response.statusCode());
响应返回 401 代码。因此,必须发送凭据
Status 401
使用 HTTP 标头进行身份验证
将凭据传递到端点的第一种方法是在 http 请求对象中设置标头。HttpRequest 类包含两种不同的方法来添加/设置标头:
- setHeader 方法将给定的名称/值对设置为此请求的标头集。这将覆盖任何先前设置的名称值。
- 另一方面,标头方法将给定的名称/值对添加到该请求的标头集中。给定值将添加到该名称的值列表中。
还有第三个选项可以添加多个标头。这里我们只调用 header 方法。代码如下所示
String credentials = "user1234:password5678";
String headerValue = "Basic " + Base64.getEncoder()
.encodeToString(credentials.getBytes());
var request = HttpRequest.newBuilder()
.uri(URI.create("http://localhost:8080/api/v1/customers"))
.header("Authorization", headerValue)
.GET()
.build();
借助 java.util 包中的 Base64 类可以轻松完成编码。并且授予对资源的访问权限。控制台输出
Status 200
Body [{"id":1,"name":"Joe Smith","email":"joe.smith@gmail.com",...
使用 Authenticator 类进行身份验证
提供凭据的第二种方法是在 HttpCLient 对象中配置身份验证器。Authenticator 是一个抽象类,它知道如何获取网络连接的身份验证。身份验证器类通过提示用户输入用户名和密码等凭据信息来执行身份验证。应用程序将实现一个具体的子类并覆盖 getPasswordAuthentication。该函数仅返回数据持有者类PasswordAuthentication以及用户名和密码。
代码如下
var client = HttpClient.newBuilder()
.connectTimeout(Duration.ofMillis(500))
.authenticator(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(
"user1234", "password5678".toCharArray());
}
})
.build();
控制台显示调用端点成功
Status 200
Body [{"id":1,"name":"Joe Smith","email":"joe.smith@gmail.com",...
概括
在这篇短文中,我们了解了如何使用 Java Http Client API 访问受保护的资源。只需几行代码即可轻松设置。这是通过将 Authorization 标头添加到 HttpRequest 对象或在 HttpClient 对象中配置 Authenticator 类来实现的。
关注并回复1即可领取【Java学习资料大礼包】
猜你喜欢
- 2024-10-16 第三方接口调用方案设计(第三方接口调用方式)
- 2024-10-16 java连接数据库的常见问题及解决办法
- 2024-10-16 Java Servlet实现Hessian接口调用
- 2024-10-16 Java调用外部程序的疑惑?(java调用外部类)
- 2024-10-16 Spring6.1新特性,四种方式调用REST接口(RestClient...)
- 2024-10-16 netty系列之:使用netty搭建websocket客户端
- 2024-10-16 axis2客户端调用免费的webservice服务的实例
- 2024-10-16 程序员2022年你不懂RPC远程过程调用,RPC框架的话真的要被淘汰了
- 2024-10-16 K8S官方java客户端之五:proto基本操作
- 2024-10-16 服务之间调用的4种方式(服务调用超时请稍后重试是什么意思)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)