我已经使用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。
请告诉我需要做什么。
答案 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方法的消息回调处理程序