我在Java中使用基于SOAP的Web服务。我在SOAP UI中测试了webservice,尝试发送请求并成功获得响应。仅当我手动添加安全性 wsse:Security 并发送有效的用户名和密码时,该请求才有效。只有这样,我才得到有效的答复。
现在我想通过简单的JAVA代码发送请求,得到响应。
我使用wsimport创建存根文件。
我没有看到为设置用户名和&而生成的任何java文件密码。 我们如何设置用户名&密码并传递给请求??
对非sercured()??
使用secure()服务会有什么不同吗?赞赏。
答案 0 :(得分:2)
由于您的存根是wsse:Security
架构的bean并且xsd
是,因此您在存根中看不到与Web服务安全相关的标记(即WSS
等)一个标准,它在特定的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));
此代码段摘自apache WSS4J
项目的 Junit 测试。您可以在apache WSS4J
svn repository
testUsernameTokenText()
课程中查看UserNameTokenTest
方法
希望这有帮助,