gpt4 book ai didi

java - 使用 WS-Security 签署 SOAP 消息

转载 作者:太空宇宙 更新时间:2023-11-04 09:32:56 25 4
gpt4 key购买 nike

我需要使用一个 SOAP API,它请求所有消息都签署策略“SigOnly”。

我已经使用 wsimport 从 WSDL 生成了客户端代码,我希望它也能生成用于签名的代码,但事实并非如此。

MyWebservice service = new MyWebservice();
MyWebservicePortType port = service.getMyWebserviceSOAPportHttp();

// Build request
ObjectFactory objectFactory = new ObjectFactory();
MyRequest request = objectFactory.createMyRequest();

// Call endpoint

port.myRemoteMethod(request);

wsimport 工具是否有一个额外的开关来生成签名代码,或者我是否遗漏了客户端代码中的某些步骤?

最佳答案

WS-Security是soap的扩展,所以我不认为wsimport可以在代码生成中处理它。无论如何,您可以编写处理程序以在 SOAP 请求中添加 ws-security header 。您可以通过以下方式将处理程序添加到您的端口:

BindingProvider bp = (BindingProvider) port;
List<Handler> handlerChain = new ArrayList<Handler>();
handlerChain.add( new MyHandler() );
Binding binding = bp.getBinding();
binding.setHandlerChain(handlerChain);

MyHandler 类必须实现 SOAPHandler。这是MyHandler的handleMessage方法的实现示例,添加了一个 header

@Override
public boolean handleMessage(SOAPMessageContext smc) {
Boolean outboundProperty = (Boolean) smc.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);

if (outboundProperty.booleanValue()) {

SOAPEnvelope envelope = smc.getMessage().getSOAPPart().getEnvelope();
SOAPHeader header = envelope.addHeader();
SOAPElement security = header.addChildElement("Security", "wsse",
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
SOAPElement usernameToken = security.addChildElement("UsernameToken", "wsse");
SOAPElement username = usernameToken.addChildElement("Username", "wsse");
username.addTextNode("MyUser");

}
}

关于java - 使用 WS-Security 签署 SOAP 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56869874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com