当前位置: 首页 > 知识库问答 >
问题:

Spring WebClient:在请求正文中传递用户名和密码以获取令牌

慕仲渊
2023-03-14

在这里的Spring WebClient教程之后,我将尝试将请求正文中的用户名和密码(无基本身份验证)传递给APIendpoint,因为它期望这些参数。

我在Postman中进行了测试,在正文中提供用户名和密码作为单独的字段,并将contentType设置为application/x-www-form-urlencoded。这会得到预期的令牌,但是当我使用WebClient实现打印下面的响应时,它会打印:

{"error":"invalid_request","error_description":"Missing form parameter: grant_type"}

|

TcpClient tcpClient = TcpClient.create().option(ChannelOption.CONNECT_TIMEOUT_MILLIS, CONNECTION_TIMEOUT_MILIS)
                .doOnConnected(connection -> {
                    connection.addHandlerLast(new ReadTimeoutHandler(CONNECTION_TIMEOUT_MILIS, TimeUnit.MILLISECONDS));
                    connection.addHandlerLast(new WriteTimeoutHandler(CONNECTION_TIMEOUT_MILIS, TimeUnit.MILLISECONDS));
                });

        WebClient client = WebClient.builder().baseUrl(BASE_URL)
                .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE)
                .clientConnector(new ReactorClientHttpConnector(HttpClient.from(tcpClient))).build();           


        LinkedMultiValueMap<String, String> multiMap = new LinkedMultiValueMap<>();

        multiMap.add("username", username);
        multiMap.add("password", password);

        BodyInserter<MultiValueMap<String, Object>, ClientHttpRequest> inserter = BodyInserters.fromMultipartData(multiMap);


        WebClient.RequestHeadersSpec<?> request = client.post().uri(API_CALL_GET_TOKEN).body(inserter);


        String response = request.exchange().block().bodyToMono(String.class).block();
        System.out.println(response);

共有1个答案

石俊雄
2023-03-14

提供。接受(MediaType。APPLICATION_JSON)提供了响应:

WebClient client = WebClient.create();

LinkedMultiValueMap<String, String> credentials = new LinkedMultiValueMap<>();

credentials.add("username", username);
credentials.add("password", password);

String response = client.post()
      .uri(BASE_URL + API_CALL_GET_TOKEN)
      .contentType(MediaType.APPLICATION_FORM_URLENCODED)
      .accept(MediaType.APPLICATION_JSON)
      .body(BodyInserters.fromFormData(credentials))
      .retrieve()
      .bodyToMono(String.class)
      .block();

return response;
 类似资料:
  • 我正在使用NodeJS和Express,我想从请求中获取用户名和密码参数。我已经搜索了一段时间,我找不到我的答案。 我想接受来自 cURL 命令参数: 在我的申请中:

  • 问题内容: 帐户要求我发送出站邮件的用户名和密码。 我如何在执行时使用它该文件仅包含服务器和的条目。 问题答案: 我将以下详细信息应用于php.ini文件。它的作品很好。 这些详细信息与Outlook设置相同。

  • 我找不到如何将用户名和密码传递给KafkaConsumer。我使用SASL明文对Kafka服务器上的客户端进行身份验证。 我试图在上找到此信息https://kafka.apache.org/documentation/#consumerconfigs但结果是否定的。 我发现了一些作者使用参数“用户名”和“密码”的例子。我试图这样做: 但我得到了例外"未能构建Kafka消费者"。 如果有人知道如何

  • 我正在尝试在SoapUI中发出SOAP请求,它需要使用用户名和密码进行身份验证。我让SoapUI基于wsdl文件生成一个测试,并尝试调用该服务。我按照SoapUI网站上的步骤使用身份验证(https://www.soapui.org/soap-and-wsdl/authenticating-soap-requests.html),但我不能让它工作。我不熟悉SOAP,所以我可能缺少一些基本的东西。我

  • 我将jenkins安装到windows 10。当我访问http://localhost:8080/,我必须输入用户名和密码。 但我不会像截图显示的那样显示秘密文件夹: 在包含jenkins.war的路径文件夹中运行时,我得到了这个异常 你能帮我解决那个问题吗?。 如有任何建议,将不胜感激。提前谢谢。

  • 我正在使用get方法发送头中的4个数据(id、令牌、角色、EMPCODE), 我犯了一个错误 错误HttpErrorResponse 我的令牌是正确的,它是我在邮递员处签入的,我收到状态为200的回复,但我在我的项目中面临这个问题 我正在共享我的服务文件代码 我从组件共享代码,我已经订阅了获得响应。 当我在浏览器的网络标头中检查时,我可以检查我正在传递的请求标头没有传递到那里。