我已经获得了一个 Web 服务的 WSDL。我现在需要对该请求进行数字签名。以前的开发人员利用 Eclipse 特性来生成代理类。将 WSDL 添加到项目中,然后右键单击它,单击“Web Service”,然后单击“Generate Client”。
在我们被要求对请求进行数字签名之前,这一直很好。我做了一些挖掘,看起来 Axis 1.4 不允许您签署请求。您可以使用 WSS4J 来做到这一点。我在 WSS4j 1.5 中加入了我的项目。
我不知道如何对请求进行数字签名。这是我现有的使用代理类的代码:
XiSecureWSServiceLocator service = new XiSecureWSServiceLocator();
service.setXiSecureWSServicePortEndpointAddress(paymetricPortAddress);
XiSecureWSPortType proxy = service.getXiSecureWSServicePort();
((Stub) proxy).setTimeout(paymetricTimeOutinMillisec);
SDecrypt_InputType sdi = new SDecrypt_InputType();
sdi.setStrToken(ccNumber);
sdi.setStrUserID(user);
SDecrypt_OutputType sdo = null;
sdo = proxy.pm_SingleDecrypt(sdi);
我想做的是类似于这篇文章的事情。这是他们使用的一个函数:
public Message signSOAPEnvelope(SOAPEnvelope
unsignedEnvelope) throws Exception
{
WSSignEnvelope signer = new WSSignEnvelope();
String alias = "16c73ab6-b892-458f-abf5-2f875f74882e";
String password = "security";
signer.setUserInfo(alias, password);
Document doc = unsignedEnvelope.getAsDocument();
Document signedDoc = signer.build(doc, crypto);
// Convert the signed document into a SOAP message.
Message signedSOAPMsg =
(org.apache.axis.Message)AxisUtil.toSOAPMessage(signedDoc);
return signedSOAPMsg;
}
当创建它的所有代码都隐藏在生成的代理类中时,我如何才能对 Soap Envelope 进行签名?