gpt4 book ai didi

java - 两次调用 Web 服务时 Wss4j 和 Soaphandler 错误

转载 作者:行者123 更新时间:2023-12-01 04:50:23 26 4
gpt4 key购买 nike

当我使用 wss4j 验证服务器上 SOAP 请求的安全性时遇到问题,这是我用来验证 SOAP 请求的安全 header 的代码部分(我在 handleMessage 方法中) SOAPHandler 实现的一部分):

// get the crypto file to retrieve dedicated certificate
final Crypto iCertificateStore = WSKeystoreManagement.getCryptoFile();
final WSSecurityEngine iEngine = new WSSecurityEngine();
// Add the default config file to the engine
final WSSConfig iConfig = WSSConfig.getNewInstance();
iEngine.setWssConfig(iConfig);

try {

// check security header
final List<WSSecurityEngineResult> iSecurityParts =
iEngine.processSecurityHeader(aDocument, null, null, iCertificateStore);


} catch (final WSSecurityException iException) { ...}

请求上有一个签名和时间戳,当我第一次调用 Web 服务时,一切正常,并且请求得到处理,我使用一个小型 java 项目来调用我的 Web 服务,程序检索答案并正确完成。但后来我再次启动该程序,但这一次在服务器端检查不起作用。我一直在查看 wss4j 代码以查看问题来自何处,我已到达 DOMReference.validate 方法,其中:

        if (validateContext == null) {
throw new NullPointerException("validateContext cannot be null");
}
if (validated) {
return validationStatus;
}
Data data = dereference(validateContext);
calcDigestValue = transform(data, validateContext);

if (log.isDebugEnabled()) {
log.debug("Expected digest: " + Base64.encode(digestValue));
log.debug("Actual digest: " + Base64.encode(calcDigestValue));
}

这次 calcDigestValue 不同,我找不到原因...有人知道吗?

谢谢。

编辑:我的研究一直在进步,问题来自于请求信封的正文在客户端和服务器之间的某个地方发生了更改......我已经检查了客户端,我几乎当然 body 在那里没有改变。这些更改仅出现在第二次调用时,仍然不知道为什么??

最佳答案

我终于发现了问题,我在客户端和服务器端使用的对象之间存在差异(不要问我为什么),并且当服务器端的传输层检索它所放置的信封时正文中这些对象的 namespace 导致摘要检查签名失败。

关于java - 两次调用 Web 服务时 Wss4j 和 Soaphandler 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15095705/

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