java - Java 客户端 SOAP 请求中的 WSS header

标签 java soap wsdl soap-client

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

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

我使用 wsimport 创建 stub 文件。

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

使用 secure() 服务与使用 non-sercured () 服务有什么不同吗?

感谢。

最佳答案

您在 stub 中看不到与 Web 服务安全相关的标签(即 wsse:Security 等),因为您的 stub 是 xsd 的 Bean。架构和WSS是一个标准,它在特定的xsd中定义了自己的标签。 (例如 soap ,您可以在 <soap:envelope> 内发送您的请求,但是此相关标签不在您的 stub 中)。

添加 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));

此片段是从 apache 的 Junit 测试中提取的 WSS4J项目。您可以查看testUsernameTokenText()方法UserNameTokenTest类(class) apache WSS4J svn repository

希望这有帮助,

关于java - Java 客户端 SOAP 请求中的 WSS header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26249177/

相关文章:

java - 获取当前进程中的所有 JavaVM* 实例?

xml - Node SOAP WSDL 请求不完整(仅某些 block )

java - SOAP 附件未到达服务器端

java - Maven - 部署 :deploy-file over series of files within ${project. build.directory} (target/)

java - 在 wsdl 文件中描述字符串数组

java - SpringSession DefaultCookieSerializer.setJvmRoute 有效,但 HttpServletRequest 没有所需的 jvmRoute

java - 请求后如何持久化请求数据

java - 使用本地属性覆盖远程 Spring Cloud 属性

java - 将对象从 SOAP 处理程序发送到 Web 服务

asp.net - 如何使用 WSDL 文件使用 Web 服务?