spring-security JAX-WS客户端|发送带有安全标头的客户端请求

0ve6wy6x  于 2022-11-11  发布在  Spring
关注(0)|答案(3)|浏览(171)

我已经使用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。安全性工作正常。但是我无法测试成功案例,即客户端可以成功地从我的服务获得响应。问题是我不知道如何让我的客户端将用户名标记和时间戳与请求沿着发送。我正在使用NetBeans IDE,并且我正在实现一个JAX-WS客户端来使用this tutorial访问Spring WS。
请让我知道需要做什么。

pod7payv

pod7payv1#

对于SpringWSS,在传入的soap消息和传出的soap消息中添加安全头没有太大区别,过程非常相似。
在这两种情况下,你都应该创建一个拦截器来添加安全头。这里介绍了它。所以,如果你使用Spring创建WS客户端,你应该不会有问题,特别是如果你已经开发了服务器端,但是你参考的教程看起来不像使用Spring来实现客户端。

xriantvc

xriantvc2#

您可以通过在客户端类/类中添加以下代码来扩展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方法的消息回调处理程序中

kyks70gy

kyks70gy3#

检查客户端的此sample
您可以使用SoapUI来测试您的服务器。导入WSDL,然后选择任意请求并打开左下角的“属性”窗口。您将看到“用户名”、“密码”和“WSS密码类型”相关设置。

相关问题