oauth2.0 如何设置apache camel http POST请求的主体

oipij1gg  于 2023-03-07  发布在  Apache
关注(0)|答案(2)|浏览(155)

我只是尝试将凭据发送到一个restful服务,该服务接受json格式的用户名和密码,并将返回一个访问令牌。无论我尝试什么,我都会得到一个400错误,并且从服务器返回的错误是“必须提供一个主体”。

@Component
public class LoginRoute extends RouteBuilder {

@Override
public void configure() throws Exception {

String jsonCredentials =  "{\"username\":\"username\",\"password\":\"password\",\"grant_type\":\"password\",\"scope\":\"admin\"}";

from("timer://login?repeatCount=1")
    .setBody(constant(jsonCredentials))
    .setHeader(Exchange.HTTP_METHOD, constant(org.apache.camel.component.http4.HttpMethods.POST))
    .to("http://URL");
  }
}

我已确认我的凭据在Postman中工作正常,并收到正确的响应和访问令牌。我相信我尝试连接的服务正在使用Oauth2。

v1l68za4

v1l68za41#

试试编组。对我来说,这很有效:

// your custom defined bean
Credentials creds = new Credentials(username, password, ...);
from(...).setBody(creds).marshal().json(JsonLibrary.Jackson).to(...
abithluo

abithluo2#

下面是使用SpringXML完成此操作的一种方法

<route>
      <from uri="timer://foo?repeatCount=1"/>
      <setHeader name="CamelHttpMethod">
        <constant>POST</constant>
      </setHeader>
      <setHeader name="Content-Type">
        <constant>application/json</constant>
      </setHeader>
      <setBody>
        <constant>{ "params": { "login": "my_username", "password": "my_password" } }</constant>
      </setBody>
      <to uri="https://myapi.com/login" />
      <to uri="log:info?showBody=true&amp;showHeaders=true" />
    </route>

相关问题