2012-03-09 272 views
2

为了安全,我已经使用XWSS实现了一个Spring WS。我已将安全配置策略文件添加到我的应用程序中。JAX-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

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

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

+0

另外,marshalSendANDRecieve实现方法具的背处理器去,就可以使用了SoapUI测试Web服务。 – jddsantaella 2012-03-09 16:25:19

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