如何使用java中的HttpClient将api生成的jwt令牌获取到我的应用程序?
我有一个工作的RESTAPI,它根据用户名和密码生成JWT令牌。 URI:http://localhost:8080/user/authenticate 这将生成令牌:eyJhbGciOiJIUzI1NiJ9.EYJZDWIOILJJJJJSAWNLBNVCIIISMV4CCI6MTYXNJQ0MJYYNIAWF0IJOXNJE2NDA2NJI2FQ.vPQZqiMgM6WzeJPKD8GV-91JIAWMWmFLWTQXLRT8YLKNUNOBUYBH 我正在使用HttpClient将请求从桌面应用程序发送到服务器。我想从我的桌面端发送用户名和密码,并获取上面生成的令牌,以便我可以将其用于其他请求?我如何在下面的代码中使用java中的HttpClient如何使用java中的HttpClient将api生成的jwt令牌获取到我的应用程序?,java,spring-boot,rest,httpclient,Java,Spring Boot,Rest,Httpclient,我有一个工作的RESTAPI,它根据用户名和密码生成JWT令牌。 URI:http://localhost:8080/user/authenticate 这将生成令牌:eyJhbGciOiJIUzI1NiJ9.EYJZDWIOILJJJJJSAWNLBNVCIIISMV4CCI6MTYXNJQ0MJYYNIAWF0IJOXNJE2NDA2NJI2FQ.vPQZqiMgM6WzeJPKD8GV-91JIAWMWmFLWTQXLRT8YLKNUNOBUYBH 我正在使用HttpClient将请求从桌
HttpRequest request = HttpRequest.newBuilder()
.POST()
.uri(URI.create("http://localhost:8080/user/authenticate"))
.setHeader("Authorization", "Bearer ") // add request header
.header("Content-Type", "application/json")
.build();
HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
HttpRequest请求=HttpRequest.newBuilder()
.POST()
.uri(uri.create(“http://localhost:8080/user/authenticate"))
.setHeader(“授权”、“承载人”)//添加请求头
.header(“内容类型”、“应用程序/json”)
.build();
HttpResponse response=httpClient.send(请求,HttpResponse.BodyHandlers.ofString());
正如评论中指出的,问题中没有足够的信息
下面的代码将用户名和密码发送到服务器,读取响应正文并将其打印到标准输出(用实际值替换用户名/密码):
导入java.net.URI;
导入java.net.http.*;
导入java.nio.charset.StandardCharset;
导入java.util.Base64;
公开课考试{
公共静态void main(字符串[]args)引发异常{
String auth=“用户名:密码”;
byte[]encodedAuth=Base64.getEncoder().encode(auth.getBytes(StandardCharsets.UTF_8));
字符串authHeader=“Basic”+新字符串(encodedAuth);
HttpRequest请求=HttpRequest.newBuilder()
.POST(HttpRequest.bodypublisher.noBody())
.uri(uri.create(“http://localhost:8080/user/authenticate"))
.setHeader(“授权”,authHeader)
.header(“内容类型”、“应用程序/json”)
.build();
HttpClient HttpClient=HttpClient.newHttpClient();
HttpResponse response=httpClient.send(请求,HttpResponse.BodyHandlers.ofString());
System.out.println(“response=“+response.body());
}
}
您遇到了什么问题?请阅读。您可能需要发布有关设置等的更多信息。这取决于您的身份提供商,但假设它提供了获取访问令牌的服务,您只需使用正确的凭据调用该服务并获取令牌即可(您可能需要阅读OAuth流-假设它是OAuth)。请注意,您通常无法获得与其他应用程序相同的令牌,因为这会带来安全风险。有关如何使用基本身份验证发送JWT请求的信息,请参阅此处:
import java.net.URI;
import java.net.http.*;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Test {
public static void main(String[] args) throws Exception {
String auth = "username:password";
byte[] encodedAuth = Base64.getEncoder().encode(auth.getBytes(StandardCharsets.UTF_8));
String authHeader = "Basic " + new String(encodedAuth);
HttpRequest request = HttpRequest.newBuilder()
.POST(HttpRequest.BodyPublishers.noBody())
.uri(URI.create("http://localhost:8080/user/authenticate"))
.setHeader("Authorization", authHeader)
.header("Content-Type", "application/json")
.build();
HttpClient httpClient = HttpClient.newHttpClient();
HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("response = " + response.body());
}
}