Web services JAX-WS客户端|使用安全标头发送客户端请求

Web services JAX-WS客户端|使用安全标头发送客户端请求,web-services,spring-security,spring-ws,Web Services,Spring Security,Spring Ws,为了安全起见,我使用XWSS实现了一个SpringWS。我已将安全配置策略文件添加到我的应用程序中 <xwss:SecurityConfiguration xmlns:xwss="http://java.sun.com/xml/ns/xwss/config" dumpMessages="true"> <xwss:RequireTimestamp id="tsp" maxClockSkew="60" t

为了安全起见,我使用XWSS实现了一个SpringWS。我已将安全配置策略文件添加到我的应用程序中

<xwss:SecurityConfiguration xmlns:xwss="http://java.sun.com/xml/ns/xwss/config"
    dumpMessages="true">    
    <xwss:RequireTimestamp 
        id="tsp" 
        maxClockSkew="60" 
        timestampFreshnessLimit="300">
    </xwss:RequireTimestamp>
    <xwss:RequireUsernameToken 
        id="token" 
        passwordDigestRequired="false" 
        nonceRequired="false"/>
    <xwss:Timestamp></xwss:Timestamp>
    <xwss:UsernameToken 
        name="service" 
        password="service" 
        id="uToken" 
        digestPassword="true"
        useNonce="true"/>
</xwss:SecurityConfiguration>

现在我正在开发一个客户端来访问WS。保安工作正常。但是我无法测试客户机可以成功从我的服务中获得响应的成功案例。问题是我不知道如何让我的客户机在请求的同时发送usernametoken和时间戳。我正在使用NetBeans IDE,并且正在实现一个JAX-WS客户机,以使用访问Spring WS


请告诉我需要做什么。

对于Spring WSS,向传入的soap消息或传出的soap消息添加安全头之间没有太大区别。过程非常相似


在这两种情况下,您都应该创建一个拦截器来添加安全标头。对其进行了描述。因此,如果您使用Spring创建WS-client,您应该不会有问题,特别是如果您已经开发了服务器端,但是您参考的教程看起来不像是使用Spring来实现客户端。

您可以通过在扩展WebServiceGatewaySupport的客户机类中添加以下代码来实现这一点

SoapHeader header = msg.getSoapHeader();
StringSource headerSource = new StringSource("<wsse:Security xmlns:wsse=\"http://docs.oasis-
open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\" mustUnderstand=\"1\">   <wsse:UsernameToken> 
<wsse:Username>"+userName+"</wsse:Username>  <wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/
oasis-200401-wss-username-token-profile-1.0#PasswordText\">"+password+"</wsse:Password> </wsse:UsernameToken>" 
+"</wsse:Security>");
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(headerSource, header.getResult());
SoapHeader=msg.getSoapHeader();
StringSource headerSource=新的StringSource(“
“+用户名+”“+密码+”“”
+"");
Transformer Transformer=TransformerFactory.newInstance().newTransformer();
transform(headerSource,header.getResult());

上述内容必须包含在webserviceTemplate的MarshallSendAndRecieve方法的消息回调处理程序中

此外,您还可以使用SoapUI测试您的Web服务。