22 Star 134 Fork 47

季圣华/管伊佳物联

Create your Gitee Account
Explore and code with more than 14 million developers,Free private repositories !:)
Sign up
文件
Clone or Download
XmlUtil.java 3.67 KB
Copy Edit Raw Blame History
季圣华 authored 2025-11-25 15:53 +08:00 . XXE漏洞修复
package com.gyjiot.sip.util;
import lombok.extern.slf4j.Slf4j;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.xml.sax.SAXException;
import javax.sip.RequestEvent;
import javax.sip.message.Request;
import java.io.ByteArrayInputStream;
import java.io.StringReader;
import java.util.*;
@Slf4j
public class XmlUtil {
/**
* 解析XML为Document对象
*
* @param xml
* 被解析的XMl
* @return Document
*/
public static Element parseXml(String xml)
{
Document document = null;
//
StringReader sr = new StringReader(xml);
SAXReader reader = new SAXReader();
try {
reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
reader.setFeature("http://xml.org/sax/features/external-general-entities", false);
reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
document = reader.read(sr);
} catch (DocumentException | SAXException e) {
log.error("解析失败", e);
}
return null == document ? null : document.getRootElement();
}
/**
* 获取element对象的text的值
*
* @param em
* 节点的对象
* @param tag
* 节点的tag
* @return 节点
*/
public static String getText(Element em, String tag)
{
if (null == em)
{
return null;
}
Element e = em.element(tag);
//
return null == e ? null : e.getText();
}
/**
* 递归解析xml节点,适用于 多节点数据
*
* @param node
* node
* @param nodeName
* nodeName
* @return List<Map<String, Object>>
*/
public static List<Map<String, Object>> listNodes(Element node, String nodeName)
{
if (null == node)
{
return null;
}
// 初始化返回
List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
// 首先获取当前节点的所有属性节点
List<Attribute> list = node.attributes();
Map<String, Object> map = null;
// 遍历属性节点
for (Attribute attribute : list)
{
if (nodeName.equals(node.getName()))
{
if (null == map)
{
map = new HashMap<String, Object>();
listMap.add(map);
}
// 取到的节点属性放到map中
map.put(attribute.getName(), attribute.getValue());
}
}
// 遍历当前节点下的所有节点 ,nodeName 要解析的节点名称
// 使用递归
Iterator<Element> iterator = node.elementIterator();
while (iterator.hasNext())
{
Element e = iterator.next();
listMap.addAll(listNodes(e, nodeName));
}
return listMap;
}
public static Element getRootElement(RequestEvent evt) throws DocumentException, SAXException {
Request request = evt.getRequest();
SAXReader reader = new SAXReader();
reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
reader.setFeature("http://xml.org/sax/features/external-general-entities", false);
reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
reader.setEncoding("gbk");
Document xml = reader.read(new ByteArrayInputStream(request.getRawContent()));
return xml.getRootElement();
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/jishenghua/gyj-iot.git
git@gitee.com:jishenghua/gyj-iot.git
jishenghua
gyj-iot
管伊佳物联
e7894bf0b42a3c5547406ee0fa250d20573aad53

Search