1.主要功能:绕过证书验证 (1.用eplices生成的调用接口代码,这里没有写出来,网上有很多)
/**
* @Description sap数据下载
* @Author syj
* @Date 9:48
* @Param
* @Return
* @Exception
*/
@Request.Post("fileuploadBySAP")
public Object fileuploadBySAP(Params params){
Object o = new Object();
StringBuilder msg = new StringBuilder();
try {
Properties property = PropertiesLoaderUtils.loadPropertiesFile("doc.properties");
String SAPSOURCEURL = property.getProperty("SAPSOURCEURL");
/**创建接口对象**/
AxisProperties.setProperty("axis.socketSecureFactory", MyTLSSocketSecureFactory.class.getName());//跳过验证
/**这里是用eplices根据wsdl文件生成的访问https接口类**/
SI_GTS001_GTS_REQService si_gts001_gts_reqService = new SI_GTS001_GTS_REQServiceLocator();
URL url = new URL(SAPSOURCEURL);
SI_GTS001_GTS_REQBindingStub stub = (SI_GTS001_GTS_REQBindingStub) si_gts001_gts_reqService.getHTTPS_Port(url);
//创建请求输入对象,并赋值
log.info("=====================开始封装查询条件==================");
DT_GTS001_REQ req = new DT_GTS001_REQ();
//TODO 完善属性填充
/**头信息**/
/**明细**/
/**设置头信息**/
// String AUTH_PREFIX = "wsse";
// String AUTH_NS = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
// SOAPFactory soapFactory = SOAPFactory.newInstance();
// SOAPElement wsSecHeaderElm = soapFactory.createElement("Security", AUTH_PREFIX, AUTH_NS);
// SOAPElement userNameTokenElm = soapFactory.createElement("UsernameToken", AUTH_PREFIX, AUTH_NS);
//
// SOAPElement userNameElm = soapFactory.createElement("Username", AUTH_PREFIX, AUTH_NS);
// SOAPElement passwdElm = soapFactory.createElement("Password", AUTH_PREFIX, AUTH_NS);
// passwdElm.setAttribute("Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
// userNameElm.addTextNode("SFDC2PO");
// passwdElm.addTextNode("sfdc.1234");
// userNameTokenElm.addChildElement(userNameElm);
// userNameTokenElm.addChildElement(passwdElm);
// wsSecHeaderElm.addChildElement(userNameTokenElm);
// SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement(wsSecHeaderElm);
// soapHeaderElement.setMustUnderstand(true);
// stub.setHeader(soapHeaderElement);
/**这里是用户密码验证**/
String username = property.getProperty("SAPUSERNAME");
String password = property.getProperty("SAPPASSWORD");
stub.setUsername(username);
stub.setPassword(password);
log.info("=====================开始调用sap接口=====================");
DT_GTS001_RESP resp = stub.SI_GTS001_GTS_REQ(req);
if (resp.getITEM() == null || resp.getITEM().length == 0){
return new Result().data("未拉取到数据");
}
log.info("=====================开始处理返回数据:" + resp.toString() + "===================");
o = orderImporeSapService.getSapInvoice(resp);
System.out.println(o);
} catch (Exception e) {
e.printStackTrace();
log.info("拉取订单信息异常{}", e);
return new Result().data("拉取数据异常,请查看日志错误信息");
}
return o;
}
2.跳过验证类
import java.io.IOException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Hashtable;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.axis.components.net.JSSESocketFactory;
public class MyTLSSocketSecureFactory extends JSSESocketFactory {
public MyTLSSocketSecureFactory(Hashtable attributes) {
super(attributes);
// TODO Auto-generated constructor stub
}
// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
@Override
public X509Certificate[] getAcceptedIssuers() {
// TODO Auto-generated method stub
return null;
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
// TODO Auto-generated method stub
}
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
// TODO Auto-generated method stub
}
} };
@Override
public void initFactory() throws IOException {
SSLContext context;
try {
context = SSLContext.getInstance("TLSv1.2");
context.init(null, trustAllCerts, new java.security.SecureRandom());
sslFactory = context.getSocketFactory();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (KeyManagementException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}