使用java的客户端的cxf安全头

时间:2016-06-28 17:06:03

标签: java web-services cxf ws-security usernametoken

我的要求是使用传入的用户名,密码来实现生成ws安全标头的方法。

所以有人可以通过提供用户名和密码从xslt调用我的方法,我的方法应该能够返回安全头,并且他们可以在soap请求中附加这个安全头来调用第三方Web服务。

我正在寻找可以通过获取用户名和密码来生成soap安全标头的api。

我发现需要端口和服务信息的WSS4JOutInterceptor,但在我的情况下,我只有2个参数(UserName,PassWord)。

请建议是否有任何其他api /方法,而不是创建SoapEnvelop并添加安全元素?

<oas:Security xmlns:oas="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">     <oas:UsernameToken xmlns:oas1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" oas1:Id="UsernameToken-1">      <oas:Username> lakshmi </oas:Username><oas:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">MTQ2NzA5NTg3MjM5Mw==</oas:Nonce>       <oas:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">uSlFkVhDynZoCXFojlM1w4UrJYY=</oas:Password><oas1:Created>2016-06-28T06:37:52.425Z</oas1:Created></oas:UsernameToken></oas:Security>

1 个答案:

答案 0 :(得分:1)

您可以使用WSS4J生成安全标头

public String nodeToString(Node node) throws TransformerFactoryConfigurationError, TransformerException {
    StringWriter sw = new StringWriter();

    Transformer t = TransformerFactory.newInstance().newTransformer();
    t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
    t.setOutputProperty(OutputKeys.INDENT, "yes");
    t.transform(new DOMSource(node), new StreamResult(sw));
    return sw.toString();
}

要将节点打印为String,请使用此

 String securityHeader = nodeToString(buildSecurityHeader(username,password));

以这种方式使用

WSSecUsernameToken

结果将与此类似。在您方便时参数化WSSecHeader<wsse:Security xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" soapenv:mustUnderstand="1"> <wsse:UsernameToken wsu:Id="UsernameToken-39dba965-c4a8-4b2d-826e-ade8c0931f3f"> <wsse:Username>username</wsse:Username> <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">BxJH0G5PzPfBFbBGimF0bq3vjsY=</wsse:Password> <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">iaO1xilL6qfuN2apbSdfPQ==</wsse:Nonce> <wsu:Created>2016-06-30T07:17:26.552Z</wsu:Created> </wsse:UsernameToken> </wsse:Security> 代码

TextBox