网站首页 > 精选教程 正文
.
介绍
在本系列的第一部分(链接此处)中,介绍了 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-11-11 RuoYi若依系统的验证码如何替换为更美观的EasyCaptcha
- 2024-11-11 「Java」伪共享验证 什么是伪共享?伪共享会导致运算结果错误吗?
- 2024-11-11 Azure上的Java:云原生身份验证 azure java
- 2024-11-11 Java之HTTP请求权限验证 java之http请求权限验证怎么办
- 2024-11-11 java短信验证平台_JAVA实现利用第三方平台发送短信验证码
- 2024-11-11 OAuth2+JWT 实现权限验证 oauth2权限控制
- 2024-11-11 Java 的业务逻辑验证框架 之-fluent-validator
- 2024-11-11 java 生成4位短信验证码方法 java+生成4位短信验证码方法有哪些
- 2024-11-11 Java策略模式实现动态验证不同来源的数据
- 2024-11-11 Java安全编程:公钥加密和私钥签名的实践指南
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)