发布https类型的WS服务

使用JDK6+自带的发布ws服务Endpoint.publish


1、普通发布

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
@WebService(serviceName="SendIdcManageService")
@SOAPBinding(style=SOAPBinding.Style.RPC)
public class SendIdcManageService {
@WebMethod
public String addHostRoomFromIdc(@WebParam(name="xml")String xml){
System.out.println("success");
return "ok";
}
}
import javax.xml.messaging.Endpoint;
public class TestHttpWs{
    
    public static void main(String[] args) {
        Endpoint.publish("http://localhost:8222/hello", new SendIdcManageService());
    }
}

页面直接访问http://localhost:8222/hello接口


2、https类型发布

首先要生成keystore

keytool -genkey -v -alias jifubao -keyalg RSA -keystore D:\jifubao.keystore -validity 365002

在cmd命令下执行   输入密码后都执行回车,在最后出现的位置写Y接口

即:

CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 正确吗?

  [否]:  Y

jifubao.keystore文件放到项目中

下面示例中加入输入密码为123456

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import javax.jws.WebService;
import javax.net.ssl.KeyManager;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.xml.ws.Endpoint;
import com.sun.net.httpserver.HttpContext;
import com.sun.net.httpserver.HttpsConfigurator;
import com.sun.net.httpserver.HttpsServer;
@WebService(targetNamespace="http://hello/")
public class HttpsWsHelloWorld {
public String sayHi(){
return "Hello World!";
}
public static void main(String[] args) throws CertificateException, FileNotFoundException, IOException, UnrecoverableKeyException { 
try {
SSLContext ssl = SSLContext.getInstance("TLS");
KeyManagerFactory keyFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
KeyStore store = KeyStore.getInstance("JKS");
String keystoreFile="d:\\11\\jifubao.keystore";
String keyPass="123456";
store.load(new FileInputStream(keystoreFile),keyPass.toCharArray()); 
keyFactory.init(store, keyPass.toCharArray()); 
TrustManagerFactory trustFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustFactory.init(store);
KeyManager[] keyManagers=new KeyManager[1];
keyManagers=keyFactory.getKeyManagers();
TrustManager[] trustManagers=trustFactory.getTrustManagers();
ssl.init(keyManagers, trustManagers, new SecureRandom());
HttpsConfigurator configurator = new HttpsConfigurator(ssl); 
HttpsServer httpsServer = HttpsServer.create(new InetSocketAddress("localhost", 8441),8441);
httpsServer.setHttpsConfigurator(configurator);  
HttpContext httpContext = httpsServer.createContext("/Hello");  
httpsServer.start();  
Endpoint endpoint = Endpoint.create(new HttpsWsHelloWorld());
endpoint.publish(httpContext); 
} catch (NoSuchAlgorithmException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (KeyStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (KeyManagementException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

页面直接访问https://localhost:8441/hello即可


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。