webservicer调用https接口

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();
        }
    }

} 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值