web service https client example

本文详细介绍了Java Web服务中使用JAX-WS进行安全配置的方法,包括使用TLS进行安全连接,设置SSL协议,禁用CN检查,以及导入信任证书以确保服务的安全性和可靠性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


import java.io.InputStream;
import java.security.KeyStore;
import java.util.Arrays;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import org.apache.cxf.configuration.jsse.TLSClientParameters;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* Since Jdk1.5, enumeration is the best way to implement an anti-attack
* singleton instance.
*
*/
public enum WsPort {
Instance;
private static Logger log = LoggerFactory.getLogger(WsPort.class);

@SuppressWarnings("unchecked")
public <E> E getSSLPort(Class<E> wsImplementationClass, String trustStoreFiltePath, String trustStorePassWord, String wsURLAdress) {
E port = null;
try {
if (port == null) {
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(wsImplementationClass);
factory.setAddress(RwaCfgUtil.getInstance().getRwaWebServiceProperty(wsURLAdress));
port = (E) factory.create();
Client proxy = ClientProxy.getClient(port);
HTTPConduit conduit = (HTTPConduit) proxy.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(6000000);
httpClientPolicy.setReceiveTimeout(6000000);
conduit.setClient(httpClientPolicy);
TLSClientParameters tlsParams = conduit.getTlsClientParameters();
if (tlsParams == null) {
tlsParams = new TLSClientParameters();
}
tlsParams.setSecureSocketProtocol("SSL");
tlsParams.setDisableCNCheck(true);
tlsParams.setTrustManagers(getTrustManagers(trustStoreFiltePath, trustStorePassWord));
conduit.setTlsClientParameters(tlsParams);
}
} catch (Exception e) {
log.error("Init port failed!" + Arrays.toString(e.getStackTrace()));
}
return port;
}

private TrustManager[] getTrustManagers(String trustStoreFiltePath, String trustStorePassWord) throws AppException {
try {
InputStream fp = null;
String alg = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory factory = TrustManagerFactory.getInstance(alg);
KeyStore ks;
try {
fp = MyManager.class.getClassLoader().getResourceAsStream(CfgUtil.getInstance().getWebServiceProperty(trustStoreFiltePath));
ks = KeyStore.getInstance("JKS");
ks.load(fp, CfgUtil.getInstance().getWebServiceProperty(trustStorePassWord).toCharArray());
} finally {
if (fp != null) {
fp.close();
}
}
factory.init(ks);
TrustManager[] tms = factory.getTrustManagers();
return tms;
} catch (Exception e) {
e.printStackTrace();
throw new AppException(e);
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值