2

春の統合では、基本認証で送信ゲートウェイを呼び出したいと思います。私はこのようなものを持っています:

<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がいつか利用可能になることを願っています...ありがとう。

4

2 に答える 2

1

HttpComponentsMessageSenderSpring WSと Spring WEBの組み合わせを使用できる Java コードを入力しないでくださいHttpComponentsClientHttpRequestFactory

<bean id="httpComponentsMessageSender" class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
    <property name="credentials">
        <bean class="org.apache.commons.httpclient.UsernamePasswordCredentials">
            <constructor-arg value="userName"/>
            <constructor-arg value="password"/>
        </bean>
    </property>
</bean>

<bean id="clientHttpRequestFactory" class="org.springframework.http.client.HttpComponentsClientHttpRequestFactory">
    <property name="httpClient" value="#{httpComponentsMessageSender.httpClient}"/>
</bean>

<int-http:outbound-gateway url-expression="@urlExpressionGateway.getUrlFor(payload) + '/consultersite'"
                           request-factory="clientHttpRequestFactory"/>

私の答えがあなたのケースに完全ではないかもしれないと私は信じています。しかし、それが少し役立つことを願っています。

HttpComponentsClientHttpRequestFactory#createRequest実行時に認証してこれを行うには、独自に実装する必要があるかもしれません。

method.addRequestHeader(new Header(WWW_AUTH_RESP, authstring, true));

のソースコードを見てみましょうHttpMethodDirector#authenticateHost

于 2013-10-29T10:19:02.097 に答える