【问题标题】:WSS headers in SOAP request for java clientJava 客户端的 SOAP 请求中的 WSS 标头
【发布时间】:2014-10-08 04:23:11
【问题描述】:

我正在使用 Java 中的基于 SOAP 的 Web 服务。我在 SOAP UI 中测试了 Web 服务,尝试发送请求并成功获得响应。只有当我手动添加安全 wsse:Security 并发送有效的用户名和密码时,该请求才有效。只有这样我才能得到有效的响应。

现在我想通过一个简单的 JAVA 代码发送请求,得到响应。

我使用 wsimport 创建存根文件。

我没有看到任何用于设置用户名和密码的 java 文件。 我们需要如何设置用户名和密码并传递给请求?

使用secured()服务和non-sercured()会有什么不同吗??

赞赏。

【问题讨论】:

    标签: java soap wsdl soap-client


    【解决方案1】:

    由于您的存根是 xsd 架构的 bean,而 WSS 是定义了自己的标签的标准,因此您在存根中看不到 Web 服务安全相关标签(即 wsse:Security等)在特定的xsd 中(例如soap,您可以在<soap:envelope> 中发送您的请求,但是此相关标签不在您的存根中)。

    要将WSS 功能添加到您的Java 客户端,您可以使用apache WSS4J。为了按照您在问题中的要求添加用户名和密码,您可以使用以下代码:

    WSSecUsernameToken builder = new WSSecUsernameToken();
    builder.setPasswordType(WSConstants.PASSWORD_TEXT);
    // set user name an password
    builder.setUserInfo("wernerd", "verySecret");
    // create a sample soap message
    Document doc = SOAPUtil.toSOAPPart(SOAPUtil.SAMPLE_SOAP_MSG);
    WSSecHeader secHeader = new WSSecHeader(doc);
    secHeader.insertSecurityHeader();
    // create the soap message with WSS headers
    Document signedDoc = builder.build(doc, secHeader);
    // simply print the result
    System.out.println(XMLUtils.prettyDocumentToString(signedDoc));
    

    这个 sn-p 是从 apache WSS4J 项目的 Junit 测试中提取的。您可以在apache WSS4J svn repository 上的UserNameTokenTest 类上检查testUsernameTokenText() 方法

    希望这会有所帮助,

    【讨论】:

    • 谢谢@albciff。我能够通过请求处理程序和 SOAPMessage 传递标头和安全性。现在我可以生成 xml 请求了。
    • @Venkat 完美:).
    猜你喜欢
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多