Camel组件端点选项的密码被篡改,如何防止这种情况?

xvw2m8pv  于 2022-11-07  发布在  Apache
关注(0)|答案(2)|浏览(150)

在Camel中,我使用http4组件在远程服务器上发出REST请求。
组件documentation声明应将凭据放在端点上的选项中,如下所示:

https4://myremote.server.com/?authUsername=xxx&authPassword=yyy

在其他环境中使用带有“+”字符的密码之前,这个方法一直运行良好。我们注意到,“+”字符在服务器中以空格的形式传输,这会产生一个错误。通过在Camel文档中更深入地搜索,我们发现a page解释了一个“RAW”函数的用法,如下所示:

https4://myremote.server.com/?authUsername=xxx&authPassword=RAW(yyy)

以保持密码不变。
不幸的是,此功能仅在Camel 2.11版本中引入,目前我们不打算升级到ServiceMix 5.1.x。
我们目前使用的是serviceMix 4.5.x,camel版本是2.10.7。
我在路线中试过这些(一个接一个):

  • .setHeader("Authorization", "Basic {base64Hash}")
  • .setHeader("Authorization", "Basic {base64Hash}")
  • .setProperty(HttpHeaders.AUTHORIZATION, "Basic {base64Hash}")
  • .setHeader(HttpHeaders.AUTHORIZATION, "Basic {base64Hash}")

但是远程服务器向我发送了401(未授权)。
问题是:除了在端点上使用选项之外,是否还有其他方法可以发送http4组件的凭证?

ovfsdjhp

ovfsdjhp1#

我终于找到了一种方法,我遇到的问题是服务器需要一个额外的参数,称为:X-Forwarded-Proto,则以下方法可以很好地代替在端点选项中传递凭据:

from(in.getEndpointUri())
    .setHeader(Exchange.HTTP_METHOD, constant("GET"))
    .setHeader(Exchange.HTTP_PATH, simple("/path/to/my/resource/1234"))
    .setHeader(Exchange.HTTP_QUERY, constant("type=accessories&view=blue"))
    .setHeader("X-Forwarded-Proto", constant("https"))
    .setHeader("Authorization", constant("Basic bXl1c2VybmFtZTpwYXNzd29yZDEyMzQ="))

    .to("https4://myremote.server.com/myrestservices")
    .convertBodyTo(String.class)
    ;

之后,使用bean或处理器来生成Base64哈希就很容易了。

bybem2ql

bybem2ql2#

请将密码中的+字符替换为Camel端点URI中的%2B,这样应该可以使用。

相关问题