我一直在尝试使用Apache Camel的HTTP4组件连接到需要基本身份验证的HTTPS URL。该连接需要通过身份验证的HTTP代理来完成。
因此,根据文档,我将骆驼端点配置为这样:
.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
的源,似乎由于两个配置者都通过setDefaultCredentialsProvider
将其凭据设置为HttpClientBuilder
,因此其中一个被丢失 - 在此过程中被覆盖 -
看起来它可能是骆驼的HTTP4组件中的错误?还是我错过了什么?
这是骆驼2.18.2,带有Spring Boot 1.5.1.Release。
在Apache Camel用户列表上提出此问题后,似乎已确认错误。
我使用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")