解析XML请求(安全模式)

安全模式下的消息格式:

new_msg=
<xml> 
	<ToUserName><![CDATA[toUser]]</ToUserName>
       <Encrypt><![CDATA[msg_encrypt]]</Encrypt>
</xml>

现有消息格式:

msg=
<xml>
	 <ToUserName><![CDATA[toUser]]></ToUserName>
	 <FromUserName><![CDATA[fromUser]]></FromUserName>
	 <CreateTime>12345678</CreateTime>
	 <MsgType><![CDATA[text]]></MsgType>
	 <Content><![CDATA[你好]]></Content>
</xml>


加密后消息格式:

new_msg=
<xml>
	<Encrypt><![CDATA[msg_encrypt]]></Encrypt>
	<MsgSignature><![CDATA[msg_signature]]></MsgSignature>
	<TimeStamp>timestamp</TimeStamp>
	<Nonce><![CDATA[nonce]]></Nonce>
</xml> 

代码如下:

public static HashMap<String, String> parseXMLCrypt(HttpServletRequest request) throws Exception {
    HashMap<String, String> map = new HashMap<String, String>();
 
    /**
     * 第1步:获取加密的xml文本
     */
    InputStream is = request.getInputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
 
    String line = null;
    StringBuffer buffer = new StringBuffer();
    while((line = br.readLine()) != null) {
        buffer.append(line);
    }
 
    /**
     * 第2步:解密
     */
    String msgSignature = request.getParameter("msg_signature");
    String timestamp = request.getParameter("timestamp");
    String nonce = request.getParameter("nonce");
    String fromXML = MessageUtil.getWxCrypt().decryptMsg(msgSignature, timestamp, nonce, buffer.toString());
 
    /**
     * 第3步:解析xml文本
     */
    // 通过IO获得Document
    Document doc = DocumentHelper.parseText(fromXML);
 
    // 得到xml的根节点
    Element root = doc.getRootElement();
    recursiveParseXML(root, map);
 
    return map;
}
 
public static void recursiveParseXML(Element root, HashMap<String, String> map) {
    // 得到根节点的子节点列表
    List<Element> elementList = root.elements();
 
    if (elementList.size() == 0) {
        map.put(root.getName(), root.getTextTrim());
    } else {
        for (Element e : elementList) {
            recursiveParseXML(e, map);
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值