`

Springboot项目(整合WebService带协议头验证+WebSocket+Web+动态日志输出)

阅读更多

环境配置:

      springboot 1.5.14.RELEASE  ,JDK1.8 

项目目录结构:
        无法上传
核心方法:

       接口调用方法

/**
 * 数据上报
 * @param config
 * @param datas
 * @return
 * @throws Exception
 */
public String report(ReportConfigVo config,byte [] datas) {
    String ret = null;
    try {
        if (null != config && !BlankUtil.isBlank(datas)) {
            // 创建动态客户端
            JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
            //http://192.168.1.75:8091/service/transfer?wsdl
            Client client = dcf.createClient(config.getUpUrl());
            // 需要密码的情况需要加上用户名和密码
            client.getOutInterceptors().add(new HeaderIntercepter(config.getDataCenterCode(), config.getValidatePwd()));
            // invoke("方法名",参数1,参数2,参数3....); 为接口中定义的方法名称 ,传递的参数,返回一个Object数组
            Object[] objects = client.invoke("transfer", datas);
            ret = objects[0].toString();
            log.info("返回结果:" + ret);
        }
    }catch (ServiceConstructionException e){
        log.error("接口服务器连接异常!["+e.getMessage()+"]");
    }catch (Exception er){
        log.error("数据上报异常!["+er.getMessage()+"]");
    }
    return ret;
}

   拦截器类:

    HeaderIntercepter.java  

import com.xxxxxx.report.security.MD5Util;
import com.xxxxxx.report.utlis.Constant;
import org.apache.cxf.binding.soap.SoapHeader;
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;
import org.apache.cxf.headers.Header;
import org.apache.cxf.helpers.DOMUtils;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import javax.xml.XMLConstants;
import javax.xml.namespace.QName;
import javax.xml.soap.*;
import javax.xml.ws.handler.MessageContext;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;


/**
 * 自定义的soap拦截器-用来添加header信息
 * Created by bluelotus on 2017/8/16.
 */
public class HeaderIntercepter extends AbstractSoapInterceptor {

    private String qname;

    private String username ;

    private String password ;


    public HeaderIntercepter() {
        super(Phase.WRITE);
    }

    public HeaderIntercepter(String userName,String password) {
        super(Phase.WRITE);
        this.username = userName;
        this.password = password;
    }

 
    public void handleMessage(SoapMessage soapMessage) throws Fault {
        Document doc=DOMUtils.createDocument();
        // 根节点
        Element rootEle=doc.createElementNS("", "AuthToken");
        // 用户ID
        Element userEle = doc.createElement("username");
        userEle.setTextContent(this.username);
        rootEle.appendChild(userEle);
        // 密码
        Element passEle = doc.createElement("password");
        passEle.setTextContent(MD5Util.md5(this.password));
        rootEle.appendChild(passEle);
        // 添加到头
        List<Header> headers = soapMessage.getHeaders();
        QName qname=new QName("AuthToken");
        SoapHeader head=new SoapHeader(qname, rootEle);
        headers.add(head);
    }


    private Object getHeader() {
        QName qName = new QName("", "", "");
        Document document = DOMUtils.createDocument();
        Element element = document.createElementNS(qname, "RequestSOAPHeader");
        Element token = document.createElement("token");
        token.setTextContent("kkkkk");
        // element.appendChild(token);
        SoapHeader header = new SoapHeader(qName, token);
        return (header);
    }

    public String getQname() {
        return qname;
    }

    public void setQname(String qname) {
        this.qname = qname;
    }
}

   

配置类:

  

/**
 * 配置信息
 * Created by bluelotus on 2017/8/9.
 */
public class ReportConfigVo extends ReportConfig{
 
}

 

/**
 * 上报配置信息
 * Created by bluelotus on 2017/8/9.
 */
public class ReportConfig {
  
    //数据中心编码
    private String dataCenterCode;
    //上报接口网址
    private String upUrl;
    //压缩包密码
    private String compressPwd;
    //验证密码
    private String validatePwd;

}

   

    MD5加密类:

  /**

 * Created by Administrator on 2017/6/28.
 */
public class MD5Util {

    private static final String encryModel="MD5";
    /**
     * 32λmd5.
     * 32位小写md5加密
     * @param str
     * @return
     */
    public  static String md5(String str) {
        return encrypt(encryModel, str);
    }

    public static String encrypt(String algorithm, String str) {
        try {
            MessageDigest md = MessageDigest.getInstance(algorithm);
            md.update(str.getBytes());
            StringBuffer sb = new StringBuffer();
            byte[] bytes = md.digest();
            for (int i = 0; i < bytes.length; i++) {
                int b = bytes[i] & 0xFF;
                if (b < 0x10) {
                    sb.append('0');
                }
                sb.append(Integer.toHexString(b));
            }
            return sb.toString();
        } catch (Exception e) {
            return "";
        }
    }
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics