Apache camel 骆驼组件端点密码选项被更改,如何防止这种情况?

Apache camel 骆驼组件端点密码选项被更改,如何防止这种情况?,apache-camel,authorization,credentials,options,apache-servicemix,Apache Camel,Authorization,Credentials,Options,Apache Servicemix,在Camel中,我使用http4组件在远程服务器上发出REST请求 组件声明应将凭据放入端点上的选项中,如下所示: https4://myremote.server.com/?authUsername=xxx&authPassword=yyy https4://myremote.server.com/?authUsername=xxx&authPassword=RAW(yyy) 在有人在另一个环境中输入带有“+”字符的密码之前,这种方法一直运行良好。 我们注意到,“+”字符作

在Camel中,我使用http4组件在远程服务器上发出REST请求

组件声明应将凭据放入端点上的选项中,如下所示:

https4://myremote.server.com/?authUsername=xxx&authPassword=yyy
https4://myremote.server.com/?authUsername=xxx&authPassword=RAW(yyy)
在有人在另一个环境中输入带有“+”字符的密码之前,这种方法一直运行良好。 我们注意到,“+”字符作为一个空格在服务器中传输,这会产生一个错误。 通过深入搜索Camel文档,我们发现有一个“RAW”函数可以这样使用:

https4://myremote.server.com/?authUsername=xxx&authPassword=yyy
https4://myremote.server.com/?authUsername=xxx&authPassword=RAW(yyy)
保持密码不变

不幸的是,该功能仅在Camel 2.11版本中引入,目前我们不打算升级到ServiceMix 5.1.x

我们目前使用的是serviceMix 4.5.x,驼峰版本是2.10.7

我在路线上(一个接一个)尝试了这些:

  • .setProperty(“授权”、“基本{base64Hash}”)
  • .setHeader(“授权”、“基本{base64Hash}”)
  • .setProperty(HttpHeaders.AUTHORIZATION,“Basic{base64Hash}”)
  • .setHeader(HttpHeaders.AUTHORIZATION,“Basic{base64Hash}”)
但是远程服务器向我发送401(未经授权)


问题是:除了在端点上使用选项之外,还有其他方法可以发送http4组件的凭据吗?

请将密码中的
+
字符替换为Camel端点URI中的
%2B
,它应该可以工作。

我终于找到了一种方法,我遇到的问题是服务器需要一个额外的密码调用的参数:
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散列将很容易。

我们已经尝试过了,但在解码选项时它仍然被转换为空格。