如何使用java中的HttpClient将api生成的jwt令牌获取到我的应用程序?

如何使用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将请求从桌

我有一个工作的RESTAPI,它根据用户名和密码生成JWT令牌。 URI:http://localhost:8080/user/authenticate

这将生成令牌:eyJhbGciOiJIUzI1NiJ9.EYJZDWIOILJJJJJSAWNLBNVCIIISMV4CCI6MTYXNJQ0MJYYNIAWF0IJOXNJE2NDA2NJI2FQ.vPQZqiMgM6WzeJPKD8GV-91JIAWMWmFLWTQXLRT8YLKNUNOBUYBH

我正在使用HttpClient将请求从桌面应用程序发送到服务器。我想从我的桌面端发送用户名和密码,并获取上面生成的令牌,以便我可以将其用于其他请求?我如何在下面的代码中使用java中的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());

       }
    }