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

时间:2012-03-09 06:34:42

标签: web-services spring-security spring-ws

我已经使用XWSS实现了Spring WS的安全性。我已将安全配置策略文件添加到我的应用程序中。

<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的客户端。安全工作正常。但我无法测试客户端可以成功从我的服务获得响应的SUCCESS案例。问题是我不知道如何让我的客户端发送usernametoken和时间戳以及请求。我正在使用NetBeans IDE,我正在使用this tutorial实现一个JAX-WS客户端来访问Spring WS。

请告诉我需要做什么。

2 个答案:

答案 0 :(得分:2)

对于Spring WSS,为输入的soap消息或传出的SOAP消息添加安全标头没有太大区别。这个过程非常相似。

在这两种情况下,您都应该创建一个用于添加安全标头的拦截器。它被描述为here。因此,如果使用Spring创建WS客户端,则应该没有问题,特别是如果您已经开发了服务器端,但是您引用的教程看起来并不像使用Spring来实现客户端。

答案 1 :(得分:1)

您可以通过在扩展webservicetgatewaysupport的客户端类/类中添加以下代码来实现此目的。

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());

上面必须进入webserviceTemplate的marshalSendANDRecieve方法的消息回调处理程序