gpt4 book ai didi

java - 使用 Intellij 生成的代码、客户端证书和 session cookie 的 SOAP Webserice。独立工作。不适用于 glassfish 3.1.2.2

转载 作者:太空宇宙 更新时间:2023-11-03 13:39:52 24 4
gpt4 key购买 nike

我正在尝试调用我们无法控制的第 3 方 SOAP 网络服务。此服务基于 https,需要客户端证书、用户名和密码,以及在服务端完成的许多重定向之一期间传递的 session cookie。

在经历了很多痛苦之后,我终于使用下面的代码在一个独立的 java 应用程序(使用 java 1.6)中实现了它:

(注意:TableOut、TableIn、DMService 和 DataManagementServicePortType 是 IntelliJ 从 WSDL 生成的类)

public TableOut callWebService(TableIn tIn)throws Exception{
System.setProperty("javax.net.ssl.keyStore", getKeyStoreLocationFile().getAbsolutePath());
System.setProperty("javax.net.ssl.keyStorePassword", getKeyStorePassword());
System.setProperty("javax.net.ssl.trustStore", getTrustStoreLocationFile().getAbsolutePath());
System.setProperty("javax.net.ssl.trustStorePassword", getTrustStorePassword());

Authenticator.setDefault(new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(getServiceUserID(), getServicePassword().toCharArray());
}
});

CookieManager manager = new CookieManager(null, CookiePolicy.ACCEPT_ALL);
CookieHandler.setDefault(manager);

DMService dmService = new DMService(new URL(getEndpointURL()), new QName("http://archserver.wsdl.dataflux.com", "DMService"));
DataManagementServicePortType port = dmService.getPort(dmService.getServiceName(), DataManagementServicePortType.class);

Map<String, Object> reqContext = ((BindingProvider)port).getRequestContext();

reqContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, getEndpointURL());
reqContext.put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);

TableOut tOut = port.datasvcUidWsHcpDdfIn(tIn);
}

调用返回在主方法中运行的所需结果。但是,此 Web 服务调用的真正用法是在更大的现有 Web 应用程序的上下文中。我遇到的问题是,在应用程序服务器上运行时,我似乎没有将任何 cookie 放入 CookieManager 中。在应用程序服务器中,我没有设置系统属性,因为 glassfish 有自己的 keystore 和 cacerts,它们分别添加了客户端和服务器证书。我正在学习所有这些东西,所以我对 cookie 处理、SSL 证书和一般的 cookie 处理还很陌生。

我编写了一个包含上述代码的小型 JSP 测试,以确保较大的应用程序没有做任何事情来阻止我的 cookie 检索,即使那样,CookieManager 中也没有 cookie。我使用的是 glassfish 3.1.2.2 和 java 1.6。

我完全没有想法,所以欢迎任何建议。

最佳答案

结果是 glassfish 没有使用正确的 keystore ,或者它忽略了该 keystore 中的客户端 key ,但这最终是证书问题,而不是 cookie 问题(我没有得到 cookie,因为我不是t通过证书)。我最终加载了专门用于此 URL 连接/SSL 上下文的工作 keystore 文件并以这种方式使用它,它现在可以工作了。

关于java - 使用 Intellij 生成的代码、客户端证书和 session cookie 的 SOAP Webserice。独立工作。不适用于 glassfish 3.1.2.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27021943/

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