我正在开发一个Java桌面应用程序,我想在其中使用Web服务。 Web服务需要使用binarysecuritytoken
进行双向SSL连接以及消息级安全性。我使用NetBeans IDE 6.9.1和JDK 1.6.0.23以及JAX-WS作为ws包装器。如何在不使用客户端计算机上的任何Web服务器的情况下与ws通信。我读过的大多数东西需要在客户机上有tomcat或其他一些web服务器(在tomcat中配置密钥库等等)。有可能吗?请为基于SSL的ws客户端推荐一些Java桌面应用程序文章。
答案 0 :(得分:4)
以下是两种处理WS over SSL http://ws.apache.org/xmlrpc/ssl.html的方法 正确的方法是为SE和EE解决方案配置和使用密钥库 下一个快速解决方案对我也有用:
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());
}
}
答案 1 :(得分:3)
在JavaSE中使用Web服务 - 请参阅NetBeans tutorial
在调用服务之前使用BindingProvider
设置属性。请参阅使用BindingProvider
here