package com.yinhai.webservice.bridge;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.KeyStore;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.logging.Logger;
import javax.net.ssl.KeyManager;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import com.yinhai.webservice.app.aa.action.YAA01WCAction;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.cxf.configuration.jsse.TLSClientParameters;
import org.apache.cxf.configuration.security.FiltersType;
import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.transport.http.HTTPConduit;
public class BridgeWebserviceUtil {
// private final static String WebServiceIp = BridgeWebserviceUtil.getInstance().getPropValue("WebServiceIp");
private static Logger logger = Logger.getLogger(BridgeWebserviceUtil.class.getName());
public static final BridgeWebserviceUtil instance;
private Properties initProp = new Properties();
public BridgeWebserviceUtil() {
}
public static String getWebserviceIp(String webserviceIp) {
return BridgeWebserviceUtil.instance.getPropValue(webserviceIp);
}
static{
instance = new BridgeWebserviceUtil();
instance.init();
}
private void init() {
InputStream in = null;
try {
in = getClass().getResourceAsStream("/bs/cxf/bridge/bridgeconfig.properties");
initProp.load(in);
} catch (IOException e) {
logger.info(e+"");
}finally {
try {
if(in!=null)
in.close();
} catch (IOException e) {
logger.info(e+"");
}
}
}
public String getPropValue(String name) {
String retStrt = null;
retStrt = initProp.getProperty(name);
return retStrt;
}
/**
* 根据对应的serviceName获取对应的wsdl
* @param webserviceIpFlag
* @param serviceName
* @param c
* @return
*/
public static Object getWebService(String webserviceIpFlag, Object serviceName ,Class c){
String webServiceIp = getWebserviceIp(webserviceIpFlag); //获取对应的webserviceIp;
// String address = "http://" + webServiceIp + "/xz/services/" + serviceName + "?wsdl";
// String address = "https://" + webServiceIp + "/xz/services/" + serviceName + "?wsdl";
String address = webServiceIp + "/xz/services/" + serviceName + "?wsdl";
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();// 获取webservice代理
factory.setAddress(address);//添加服务器webservice地址
Map<String, Object> props = new HashMap<String, Object>();
props.put("mtom-enabled", Boolean.TRUE);//设置上传文件的传输方式(“mtom-enabled”,是否允许使用mtom)
factory.setProperties(props);
Object service = null;
factory.setServiceClass(c);
service = factory.create();//获取婚姻webservice接口,IYAR03WC为客户端接口
factory = null;
return service;
}
/**
*
* @param c
* @param dir_truststore 信任store所处的位置
* @param dir_keystore 私钥store所处的位置
*/
public static void configureSSLOnTheClient(Object c,String dir_truststore,String dir_keystore) {
org.apache.cxf.endpoint.Client client = ClientProxy.getClient(c);
HTTPConduit httpConduit = (HTTPConduit) client.getConduit();
TLSClientParameters tlsParams = new TLSClientParameters();
tlsParams.setDisableCNCheck(true);
TrustManager[] tm = getTrustManagers(dir_truststore);
tlsParams.setTrustManagers(tm);
KeyManager[] km = getKeyManagers(dir_keystore);
tlsParams.setKeyManagers(km);
FiltersType filter = new FiltersType();
filter.getInclude().add(".*_EXPORT_.*");
filter.getInclude().add(".*_EXPORT1024_.*");
filter.getInclude().add(".*_WITH_DES_.*");
filter.getInclude().add(".*_WITH_NULL_.*");
filter.getExclude().add(".*_DH_anon_.*");
tlsParams.setCipherSuitesFilter(filter);
httpConduit.setTlsClientParameters(tlsParams);
}
private static TrustManager[] getTrustManagers(String dir_truststore) {
TrustManager[] trustManager = null;
InputStream fp = null;
try {
String trustpass = "123456";
String alg = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory factory = TrustManagerFactory.getInstance(alg);
fp = new FileInputStream(getWebserviceIp(dir_truststore));
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(fp, trustpass.toCharArray());
factory.init(ks);
trustManager = factory.getTrustManagers();
} catch (Exception e) {
logger.info(e+"");
} finally {
if (fp != null) {
try {
fp.close();
fp = null;
} catch (IOException e) {
logger.info(e+"");
}
}
}
return trustManager;
}
public static KeyManager[] getKeyManagers(String dir_keystore) {
InputStream is = null;
KeyManager[] keyManager = null;
try {
// 获取默认的 X509算法
String alg = KeyManagerFactory.getDefaultAlgorithm();
// 创建密钥管理工厂
KeyManagerFactory factory = KeyManagerFactory.getInstance(alg);
is = new FileInputStream(getWebserviceIp(dir_keystore));
// 构建以证书相应格式的证书仓库
KeyStore ks = KeyStore.getInstance("pkcs12");
// 加载证书
String keypass = "123456";
ks.load(is, keypass.toCharArray());
factory.init(ks, keypass.toCharArray());
keyManager = factory.getKeyManagers();
} catch (Exception e) {
logger.info(e+"");
} finally {
if (is != null) {
try {
is.close();
is = null;
} catch (IOException e) {
logger.info(e+"");
}
}
}
return keyManager;
}
}