春の統合では、基本認証で送信ゲートウェイを呼び出したいと思います。私はこのようなものを持っています:
<int-http:inbound-gateway id="versionRequestGateway"
supported-methods="POST" request-channel="requestVersionChannel"
reply-channel="requestTransformerVersionChannel"
path="/consultersite" reply-timeout="10000" request-payload-type="java.lang.String">
</int-http:inbound-gateway>
<int-http:outbound-gateway order="1" request-channel="requestVersionChannel"
url-expression="@urlExpressionGateway.getUrlFor(payload) + '/consultersite'"
reply-channel="responseVersionChannel"
http-method="POST"
expected-response-type="java.lang.String" >
</int-http:outbound-gateway>
outbound-gateway の URL は動的です。
これで、outbound-gateway で rest-template 属性を使用することにしました。
<bean id="httpClientParams" class="org.apache.commons.httpclient.params.HttpClientParams">
<property name="authenticationPreemptive" value="true"/>
<property name="connectionManagerClass" value="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager"/>
</bean>
<bean id="httpClient" class="org.apache.commons.httpclient.HttpClient">
<constructor-arg ref="httpClientParams"/>
</bean>
<bean id="httpClientFactory" class="org.springframework.http.client.CommonsClientHttpRequestFactory">
<constructor-arg ref="httpClient"/>
</bean>
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
<constructor-arg ref="httpClientFactory"/>
</bean>
春のアプリケーションコンテキストがロードされた後、 ApplicationListener に UsernamePasswordCredentials を挿入すると機能します。
HttpClient client = ctx.getBean("httpClient", HttpClient.class);
UsernamePasswordCredentials credentials = new UsernamePasswordCredentials("username", "password");
client.getState().setCredentials(AuthScope.ANY, credentials);
しかし、outbound-gateway の URL によると、ユーザー名とパスワードが異なります。URL outbound-gateway に従って適切なユーザー名/パスワードを使用するにはどうすればよいですか?
独自の BasicSecureSimpleClientHttpRequestFactory を実装して SimpleClientHttpRequestFactory を拡張し、接続先の URL に従って情報 Credentials をマップする必要がありました。実装Springがいつか利用可能になることを願っています...ありがとう。