java - Java Axis 客户端创建双安全标头
问题描述
我正在使用 Axis 1.x 客户端来调用 Web 服务 (SOAP)。生成存根后,我可以调用 Web 服务,但由于没有用户名/密码而出现身份验证错误。所有在存根上设置用户名和密码的尝试都不会产生任何结果。并传递空值:
<wsse:Security xmlns:wsse="... soapenv:mustUnderstand="0">
<wsse:UsernameToken>
<wsse:Username />
<wsse:Password />
</wsse:UsernameToken>
</wsse:Security>
在发送请求之前尝试获取现有标头不会返回任何内容。所以我以编程方式创建了一个标头并将其设置在存根上。它可以工作,但现在发送了两个安全标头,一个带有凭据,一个“空”:
<wsse:Security xmlns:wsse="..." soapenv:mustUnderstand="1">
<wsse:UsernameToken xmlns:wsse="...">
<wsse:Username>xxx</wsse:Username>
<wsse:Password>xxx</wsse:Password>
<wsse:Nonce xmlns:wsse="...">8mTkXig00vZnqC2XlPWJ4A==</wsse:Nonce>
<wsu:Created xmlns:wsu="...">2019-07-19T18:46:57.048Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsse:Security xmlns:wsse="..." soapenv:mustUnderstand="0">
<wsse:UsernameToken>
<wsse:Username />
<wsse:Password />
</wsse:UsernameToken>
</wsse:Security>
为什么它发送一个空的?有什么方法可以删除它以访问它,以便我可以修改它而不创建新的标题?
解决方案
我团队中的另一位开发人员发现有一个 UsernameHandler 实现类,它添加了通过类路径上的一些 apache 配置文件配置的安全头。删除它,不再创建标题。
推荐阅读
- ruby-on-rails - Rails:在控制器中包含关注导致无法找到操作“索引”
- mysql - MySql:我可以在多个连接之间建立数据围栏吗?
- attributes - 访问对象内部表行的成员
- flutter - 制表符在颤动中无法正常工作
- c++ - 尝试在 C++ 中使用模板进行 BST 排序,但在使用随机字符串进行测试时不起作用
- authorization - 在 Blazor 服务器端 CRUD 应用程序中授权登录用户查看他们的特定数据(不是所有用户创建的所有数据)
- java - springboot启动项目的pom.xml文件报错如何解决?
- sql - Postgres 中的递归 CTE
- php - PayPal IPN:读取多个 item_name 和数量并保存到数据库
- azure - Azure OAuth2 客户端凭据流 - 获取多个范围的令牌会引发错误