outbound-gateway with Basic Authentication in spring-integration

喜夏-厌秋 提交于 2019-12-06 05:58:52

Do not type any Java code you can use a combination of Spring WS HttpComponentsMessageSender and Spring WEB 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"/>

I can believe, that my answer might not be full for your case. However I hope it can help a bit.

Maybe there is need to implement your own HttpComponentsClientHttpRequestFactory#createRequest to authenticate at runtime and do this:

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

Take a look into source code of HttpMethodDirector#authenticateHost

you should use org.apache.http.auth.UsernamePasswordCredentials implementation instead of org.apache.commons.httpclient.UsernamePasswordCredentials

<beans:bean id="httpComponentsMessageSender" class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
        <beans:property name="credentials">
            <beans:bean class="org.apache.http.auth.UsernamePasswordCredentials">
                <beans:constructor-arg value="user"/>
                <beans:constructor-arg value="password"/>
            </beans:bean>
        </beans:property>
    </beans:bean>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!