【问题标题】:Apache CXF Async Conduit and NTLM using Spring?Apache CXF Async Conduit 和 NTLM 使用 Spring?
【发布时间】:2015-11-29 01:50:26
【问题描述】:

我正在尝试找出将以下代码移动到 spring .xml 配置文件中的最佳方法:(强制异步并禁用 chunkng 以便 NTLM 工作)

final WSSoap port = new WS().getWSSoap();

final Client client = ClientProxy.getClient(port);
final HTTPConduit httpConduit = (HTTPConduit) client.getConduit();

final HTTPClientPolicy httpClientPolicy = httpConduit.getClient();
httpClientPolicy.setAllowChunking(false);
httpClientPolicy.setAutoRedirect(true);

final BindingProvider bindingProvider = (BindingProvider) port;
final Map<String, Object> requestContext = bindingProvider.getRequestContext();

final Credentials credentials = new NTCredentials("username", "password", "workstation", "domain");
requestContext.put(Credentials.class.getName(), credentials);

requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://www.example.com/");
requestContext.put(AsyncHTTPConduit.USE_ASYNC, Boolean.TRUE);

我查看了 CXF 配置页面(此处:http://cxf.apache.org/docs/configuration.html),但我没有看到任何方法可以满足我的需要。

有没有一种干净的方法来使用 spring 处理 CXF 的 NTLM 身份验证?

更新:我想出了如何强制异步管道,使用以下内容:

<cxf:bus name="asyncBus">
    <cxf:properties>
        <entry key="use.async.http.conduit" value="true"/>
    </cxf:properties>
</cxf:bus>

<http-conf:conduit name="{http://www.webserviceX.NET}GlobalWeatherSoapPort.http-conduit">
    <http-conf:client AllowChunking="false" Connection="Keep-Alive"/>
</http-conf:conduit>

<jaxws:client id="weatherClient" bus="asyncBus"
        address="http://www.webservicex.com/globalweather.asmx"
        serviceClass="net.webservicex.GlobalWeatherSoap"/>

但是我仍然无法访问请求上下文,因此我可以添加我的 NTLM 凭据。

【问题讨论】:

    标签: spring web-services cxf ntlmv2


    【解决方案1】:

    我想回答我自己的问题。经过许多小时的调试和单步调试 Apache CXF 代码,我找到了解决方案。以下 spring 配置将通过异步管道启用 NTLM 身份验证:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans
            xmlns="http://www.springframework.org/schema/beans"
            xmlns:cxf="http://cxf.apache.org/core"
            xmlns:http-conf="http://cxf.apache.org/transports/http/configuration"
            xmlns:jaxws="http://cxf.apache.org/jaxws"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="
                    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                    http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd
                    http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
                    http://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schemas/configuration/http-conf.xsd">
    
        <!-- 
            ~
            ~ create an asynchronous-only bus for NTLM requests
            ~
        -->
    
        <cxf:bus name="asyncBus">
            <cxf:properties>
                <entry key="use.async.http.conduit" value="true"/>
            </cxf:properties>
        </cxf:bus>
    
        <!-- 
            ~
            ~ configure conduit for NTLM request
            ~
        -->
    
        <http-conf:conduit name="{http://www.webserviceX.NET}GlobalWeatherSoapPort.http-conduit">
            <http-conf:client AllowChunking="false" AutoRedirect="true" Connection="Keep-Alive"/>
        </http-conf:conduit>
    
        <!-- 
            ~
            ~ create service stub
            ~
        -->
    
        <jaxws:client id="weatherClient" bus="asyncBus"
                address="http://www.webservicex.com/globalweather.asmx"
                serviceClass="net.webservicex.GlobalWeatherSoap">
    
            <jaxws:properties>
                <entry key="org.apache.http.auth.Credentials">
                    <bean class="org.apache.http.auth.NTCredentials">
                        <constructor-arg value="DOMAIN/USER:PASSWORD"/>
                    </bean>
                </entry>
            </jaxws:properties>
    
        </jaxws:client>
    
    </beans>
    

    如果需要,还可以在NTCredentials 构造函数中指定用户名、密码、域和工作站。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-21
      • 1970-01-01
      • 2018-01-05
      相关资源
      最近更新 更多