解析XML请求(安全模式)

前端之家收集整理的这篇文章主要介绍了解析XML请求(安全模式)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

安全模式下的消息格式:

  1. new_msg=
  2. <xml>
  3. <ToUserName><![CDATA[toUser]]</ToUserName>
  4. <Encrypt><![CDATA[msg_encrypt]]</Encrypt>
  5. </xml>

现有消息格式:

  1. msg=
  2. <xml>
  3. <ToUserName><![CDATA[toUser]]></ToUserName>
  4. <FromUserName><![CDATA[fromUser]]></FromUserName>
  5. <CreateTime>12345678</CreateTime>
  6. <MsgType><![CDATA[text]]></MsgType>
  7. <Content><![CDATA[你好]]></Content>
  8. </xml>


加密后消息格式:

  1. new_msg=
  2. <xml>
  3. <Encrypt><![CDATA[msg_encrypt]]></Encrypt>
  4. <MsgSignature><![CDATA[msg_signature]]></MsgSignature>
  5. <TimeStamp>timestamp</TimeStamp>
  6. <Nonce><![CDATA[nonce]]></Nonce>
  7. </xml>

代码如下:

  1. public static HashMap<String,String> parseXMLCrypt(HttpServletRequest request) throws Exception {
  2. HashMap<String,String> map = new HashMap<String,String>();
  3. /**
  4. * 第1步:获取加密的xml文本
  5. */
  6. InputStream is = request.getInputStream();
  7. BufferedReader br = new BufferedReader(new InputStreamReader(is));
  8. String line = null;
  9. StringBuffer buffer = new StringBuffer();
  10. while((line = br.readLine()) != null) {
  11. buffer.append(line);
  12. }
  13. /**
  14. * 第2步:解密
  15. */
  16. String msgSignature = request.getParameter("msg_signature");
  17. String timestamp = request.getParameter("timestamp");
  18. String nonce = request.getParameter("nonce");
  19. String fromXML = MessageUtil.getWxCrypt().decryptMsg(msgSignature,timestamp,nonce,buffer.toString());
  20. /**
  21. * 第3步:解析xml文本
  22. */
  23. // 通过IO获得Document
  24. Document doc = DocumentHelper.parseText(fromXML);
  25. // 得到xml的根节点
  26. Element root = doc.getRootElement();
  27. recursiveParseXML(root,map);
  28. return map;
  29. }
  30. public static void recursiveParseXML(Element root,HashMap<String,String> map) {
  31. // 得到根节点的子节点列表
  32. List<Element> elementList = root.elements();
  33. if (elementList.size() == 0) {
  34. map.put(root.getName(),root.getTextTrim());
  35. } else {
  36. for (Element e : elementList) {
  37. recursiveParseXML(e,map);
  38. }
  39. }
  40. }

猜你在找的XML相关文章