首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JAX-WS将用户名-令牌添加到SOAP-Header

JAX-WS将用户名-令牌添加到SOAP-Header
EN

Stack Overflow用户
提问于 2020-08-14 22:21:31
回答 1查看 186关注 0票数 0

我有一个从WSDL文件生成的JAX-WS客户机。到目前为止,使用以下代码设置Header是有效的:

代码语言:javascript
运行
复制
    WSBindingProvider bp = (WSBindingProvider) port;
    bp.setOutboundHeaders(
            Headers.create(new QName("http://schemas.xmlsoap.org/ws/2005/08/addressing", "To", "wsa"), "--To--"),
            Headers.create(new QName("http://schemas.xmlsoap.org/ws/2005/08/addressing", "Action", "wsa"), "--Action--"),
            Headers.create(new QName("http://schemas.xmlsoap.org/ws/2005/08/addressing", "MessageID", "wsa"), UUID.randomUUID().toString())
    );

这将(根据需要)生成以下XML片段:

代码语言:javascript
运行
复制
    <S:Header>
        <To
            xmlns="http://schemas.xmlsoap.org/ws/2005/08/addressing">--to--
        </To>
        <Action
            xmlns="http://schemas.xmlsoap.org/ws/2005/08/addressing">--action--
        </Action>
        <MessageID
            xmlns="http://schemas.xmlsoap.org/ws/2005/08/addressing">fe1b400a-e724-4486-8618-b1d36a0acbbb
        </MessageID>
    </S:Header>

但是我需要以下链接的标签,这是我无法用Headers.create(...)获得的:

代码语言:javascript
运行
复制
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
    <wsse:UsernameToken wsu:Id="PartnerId" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
        <wsse:Username>--username--</wsse:Username>
    </wsse:UsernameToken>
</wsse:Security>

你知道我怎么才能把这个加到头上吗?

EN

Stack Overflow用户

发布于 2021-08-18 04:42:23

以下代码适用于我:

代码语言:javascript
运行
复制
        private static final String SCHEMA = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
        private static final String SCHEMA_PREFIX = "wsse";
        private static final String USERNAME = "username";
        private static final String PASSWORD = "password";

        // Create a SOAP header
        try {
            SOAPMessage soapMessage = MessageFactory.newInstance().createMessage();
            SOAPPart soapPart = soapMessage.getSOAPPart();
            SOAPEnvelope soapEnvelope = soapPart.getEnvelope();

            SOAPHeader header = soapEnvelope.getHeader();
            // Add the security SOAP header element
              SOAPHeaderElement security = header.addHeaderElement(new QName(SCHEMA, "Security", SCHEMA_PREFIX));
              SOAPElement usernameToken = security.addChildElement("UsernameToken", SCHEMA_PREFIX);
              SOAPElement usernameElement = usernameToken.addChildElement("Username", SCHEMA_PREFIX);
              SOAPElement passwordElement = usernameToken.addChildElement("Password", SCHEMA_PREFIX);
              Name typeName = soapEnvelope.createName("type");
              passwordElement.addAttribute(typeName, "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
    
              usernameElement.setTextContent(USERNAME);
              passwordElement.setTextContent(PASSWORD);
    
              ((WSBindingProvider) webServicePort).setOutboundHeaders(Headers.create(security));
        } catch (SOAPException e) {
            logger.severe("Error setting SOAP header");
            e.printStackTrace();
        }

XML如下所示:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
    <env:Header>
        <wsse:Security env:mustUnderstand="1">
            <wsse:UsernameToken>
                <wsse:Username>username</wsse:Username>
                <wsse:Password type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</wsse:Password>
            </wsse:UsernameToken>
        </wsse:Security>
    </env:Header>
    <env:Body>
    ...

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63414620

复制
相关文章

相似问题

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