使用基本身份验证和代理身份验证的骆驼Http
问题描述:
我一直试图使用Apache Camel的Http4组件连接到需要基本身份验证的HTTPS URL。连接需要通过经过身份验证的HTTP代理完成。使用基本身份验证和代理身份验证的骆驼Http
因此,根据docs,我配置骆驼端点这样的:
.toD("https4://target.host/resource?
bridgeEndpoint=true
&mapHttpMessageBody=false
&proxyAuthHost=my.proxy.host
&proxyAuthPort=myProxyPort
&proxyAuthUsername=proxyUser
&proxyAuthPassword=proxyPassword
&proxyAuthScheme=http4
&authenticationPreemptive=true
&authUsername=myUser
&authPassword=myPassword")
导致来自目标服务器403 - Forbidden
响应。通过org.apache.http.wire
日志寻找,它示出了代理证书 PROXYUSER/的proxyPassword被转发到所述目标服务器,而不是预期的 MYUSER/的MYPASSWORD在Authorization
头。
调试为CompositeHTTPConfigurer.configureHttpClient
,ProxyHttpClientConfigurer.configureHttpClient
和BasicAuthenticationHttpClientConfigurer.configureHttpClient
源,似乎因为这两个configurers被机构将其证书的HttpClientBuilder
的setDefaultCredentialsProvider
,其中之一丢失 - 被覆盖 - 在这个过程中。
看起来它可能是骆驼的Http4组件中的错误?或者我错过了什么?
这是Camel 2.18.2与Spring Boot 1.5.1.RELEASE。
答
在Apache Camel Users list上提出这个问题后,似乎该错误得到了证实。
我使用camel-http
而不是camel-http4
来解决它。端点参数需要稍微调整:
.toD("https://target.host/resource?
bridgeEndpoint=true
&proxyHost=my.proxy.host
&proxyPort=myProxyPort
&proxyAuthUsername=proxyUser
&proxyAuthPassword=proxyPassword
&proxyAuthMethod=Basic
&authUsername=myUser
&authPassword=myPassword
&authMethod=Basic
&httpClient.authenticationPreemptive=true")