Web service client with Java application and SSL(具有 Java 应用程序和 SSL 的 Web 服务客户端)
问题描述
我正在开发一个 Java 桌面应用程序,我想在其中使用一个 Web 服务.Web 服务需要使用 binarysecuritytoken
的消息级安全性双向 SSL 连接.我将 NetBeans IDE 6.9.1 与 JDK 1.6.0.23 和 JAX-WS 用作 ws 包装器.如何在不使用客户端计算机上的任何 Web 服务器的情况下与 ws 进行通信.我阅读的大部分内容都需要在客户端机器上安装 tomcat 或其他一些 Web 服务器(在 tomcat 中配置密钥库……).有可能吗?请为 Java 桌面应用程序推荐一些基于 SSL 的 ws 客户端的文章.
I am developing a Java desktop application and I want to consume a web service in it. The web service requires two-way SSL connection with message level security using binarysecuritytoken
. I am using NetBeans IDE 6.9.1 with JDK 1.6.0.23 and JAX-WS as ws wrapper. How can I communicate with the ws without using any web server on client machine. Most of the stuff I read needs to have tomcat or some other web server on client machine (configuring the keystore in tomcat or so...). Is it possible to do? Please suggest some article for SSL based ws client for Java desktop application.
推荐答案
这里有两种处理 WS over SSL http://ws.apache.org/xmlrpc/ssl.html.
正确的方法是为 SE 和 EE 解决方案配置和使用您的密钥库.
下一个快速解决方案也适用于我:
Here are two ways to deal with WS over SSL http://ws.apache.org/xmlrpc/ssl.html.
Correct way is to configure and use your keystore for both SE and EE solutions.
Next quick solution also works for me:
package client;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import javax.xml.namespace.QName;
import ws.MyService1;
import ws.MyService1ServiceLocator;
public class Client {
public static void main(String[] args) throws Exception {
test();
}
public static void test() throws Exception {
// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
// Trust always
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
// Trust always
}
} };
// Install the all-trusting trust manager
SSLContext sc = SSLContext.getInstance("SSL");
// Create empty HostnameVerifier
HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String arg0, SSLSession arg1) {
return true;
}
};
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(hv);
// use secured service
QName qname = new QName("http://ws", "MyService1Service");
String url = "https://127.0.0.1:7002/MyService/wsdl/MyService1.wsdl";
MyService1 service = new MyService1ServiceLocator(url, qname).getMyService1();
System.out.println(service.getMessage());
}
}
这篇关于具有 Java 应用程序和 SSL 的 Web 服务客户端的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:具有 Java 应用程序和 SSL 的 Web 服务客户端
基础教程推荐
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01