gpt4 book ai didi

java - 在已生成的 SOAP 信封的安全 header 中插入用户名 token 会给我两个 header !

转载 作者:行者123 更新时间:2023-12-02 08:36:08 24 4
gpt4 key购买 nike

我正在使用 WSS4J 在已形成的 SOAP 请求信封的 header 中添加用户名 token 。

SOAP 请求如下所示:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://sample03.samples.rampart.apache.org/xsd">   
<soapenv:Header/>
<soapenv:Body>
<xsd:echo>
<xsd:param0>hurro kitty</xsd:param0>
</xsd:echo>
</soapenv:Body></soapenv:Envelope>

这是我的代码(字符串,请求,就是上面的请求):

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputSource inStream = new InputSource();
inStream.setCharacterStream(new StringReader(request));
Document document = builder.parse(inStream);

WSSecUsernameToken usernametoken = new WSSecUsernameToken();
usernametoken.setPasswordType(WSConstants.PASSWORD_TEXT);
usernametoken.setUserInfo(username, password);

WSSecHeader secHeader = new WSSecHeader("", false);
secHeader.insertSecurityHeader(document);
usernametoken.build(document, secHeader);

这是我的结果(请注意插入的 header 命名空间不正确,并且有两个 header ):

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://sample03.samples.rampart.apache.org/xsd">   
<Header>
<wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken wsu:Id="UsernameToken-2765109" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:Username>bob</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">bobPW</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</Header>
<soapenv:Header/>
<soapenv:Body>
<xsd:echo>
<xsd:param0>hurro kitty</xsd:param0>
</xsd:echo>
</soapenv:Body></soapenv:Envelope>

我做错了什么?

最佳答案

What am I doing wrong?

当您构建初始 XML 时,您需要确保 DocumentBuilderFactory 能够识别命名空间。 WSSecurity 正在尝试通过soap 命名空间查找soap header ,但它不可用。添加以下行应该可以修复它:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
...

关于java - 在已生成的 SOAP 信封的安全 header 中插入用户名 token 会给我两个 header !,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1724598/

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