首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java soap中的UserNameToken

Java soap中的UserNameToken
EN

Stack Overflow用户
提问于 2009-09-03 09:48:32
回答 1查看 14.8K关注 0票数 1

我正在尝试使用来自Netbeans的gSoap生成的wsdl。webservice要求传入UserNameToken。当我使用来自SoapUI的wsdl (它起作用)时,它会发送以下内容:

代码语言:javascript
复制
<wsse:Username>myname</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">mypass</wsse:Password>

但是,当我从Netbeans尝试使用一个处理程序(由How do I add a SOAP Header using Java JAX-WS引用)时,如下所示:

代码语言:javascript
复制
            String prefix = "wsse";
            String uri = "http://...wsssecurity...";

            SOAPElement securityElem = factory.createElement("Security",prefix,uri);

                SOAPElement UserNametokenElem = factory.createElement("UserNameToken",prefix,uri);

                    SOAPElement UsernameElem = factory.createElement("wsse:Username");
                    UsernameElem.addTextNode("myname");
                    SOAPElement PasswordElem = factory.createElement("Password");
                    PasswordElem.addTextNode("mypass");

                    UserNametokenElem.addChildElement(UsernameElem);
                    UserNametokenElem.addChildElement(PasswordElem);

                    securityElem.addChildElement(UserNametokenElem);
            SOAPHeader header = envelope.addHeader();
            header.addChildElement(securityElem);

它生成如下所示的soap头:

代码语言:javascript
复制
    <wsse:Security xmlns:wsse="http://...wsssecurity...">
    <wsse:UserNameToken xmlns:wsse="http://...wsssecurity...">
    <Username xmlns="">myname</Username>
    <Password xmlns="">mypass</Password>
    </wsse:UserNameToken>
    </wsse:Security>

这将导致webservice使用身份验证错误进行答复。

因此,我的问题是:

  1. 如何以正确的方式生成UserNameToken (就像SoapUi那样)?
  2. 是使用处理程序还是使用像Apache WSS4J这样的外部WSSE库(有人可以给我看一些示例代码)

吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-09-03 13:23:19

我最终成功地使用了wss4j,并做了如下工作:

代码语言:javascript
复制
            SOAPPart soappart = message.getSOAPPart();
            SOAPEnvelope envelope = soappart.getEnvelope();
            SOAPHeader header = envelope.getHeader();
            WSSecHeader wsheader = new WSSecHeader();
            wsheader.insertSecurityHeader(soappart);
            WSSecUsernameToken token = new WSSecUsernameToken();
            token.setPasswordType(WSConstants.PASSWORD_DIGEST);
            token.setUserInfo("myuser", "mypass");
            token.build(soappart, wsheader);

wss4j有一些嵌套的依赖项,所以要小心。

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

https://stackoverflow.com/questions/1372466

复制
相关文章

相似问题

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