首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用WS-Security对SOAP消息进行签名

使用WS-Security对SOAP消息进行签名
EN

Stack Overflow用户
提问于 2019-07-03 12:10:32
回答 1查看 555关注 0票数 1

我需要使用一个SOAP API来请求对策略"SigOnly“进行签名的所有消息。

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

代码语言:javascript
运行
AI代码解释
复制
MyWebservice service = new MyWebservice();
MyWebservicePortType port = service.getMyWebserviceSOAPportHttp();

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

// Call endpoint

port.myRemoteMethod(request);

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

EN

回答 1

Stack Overflow用户

发布于 2019-07-03 13:00:21

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

代码语言:javascript
运行
AI代码解释
复制
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方法的一个实现示例,添加了一个标头

代码语言:javascript
运行
AI代码解释
复制
@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");

    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56869874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档