package org.javaRasp.controller.utils;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.javaRasp.agent.install.RaspError;
public class Dom4j2ParseXml {
private final String JBOSS_MODULES_SYSTEM_PKGS = "jboss.modules.system.pkgs";
private final String JAVAAGENT_E_AGENT_JAR_AGENT_JAR_E_AGENT_JAR;
private String hostXmlPath;
public Dom4j2ParseXml(String xmlPath) throws RaspError {
try {
String currentPath = System.getProperty("user.dir");
JAVAAGENT_E_AGENT_JAR_AGENT_JAR_E_AGENT_JAR = "-javaagent:" + currentPath + "/agent.jar=" + currentPath;
setHostXmlPath(xmlPath);
Document document = getDocument();
document = DocumentHelper.parseText(document.asXML().replaceAll("(\r\n|\r|\n|\n\r)", ""));
addNewBookToXMLDocument(document);
writeToNewXMLDocument(document);
} catch (Exception e) {
e.printStackTrace();
throw new RaspError("parse host.xml exception");
}
}
/**
* 实现了添加新节点:host.xml的功能
* <system-properties>
<property name ="jboss.modules.system.pkgs" value ="org.javaRasp" boot-time ="true"/>
</system-properties>
<jvm name="default">
<jvm-options>
<option value="-javaagent:E:/agent_jar\agent.jar=E:/agent_jar"/>
</jvm-options>
</jvm>
*
* @param document
*/
@SuppressWarnings("unchecked")
private void addNewBookToXMLDocument(Document document) {
Element root = document.getRootElement();
List<Element> list = root.elements("servers");
for (Element element : list) {
List<Element> elements = element.elements("server");
for (Element server : elements) {
List<Element> systemEles = server.elements("system-properties");
Element sysEle = null;
if (systemEles != null && systemEles.size() > 0) {
sysEle = systemEles.get(0);
List<Element> proEles = sysEle.elements("property");
if(proEles != null && proEles.size()>0) {
for(Element proEle:proEles) {
String value = proEle.attributeValue("value");
if(value != null && value.contains("org.javaRasp")) {
continue;
}else {
createProertyElement(sysEle);
break;
}
}
}else {
createProertyElement(sysEle);
}
} else {
sysEle = server.addElement("system-properties");
createProertyElement(sysEle);
}
List<Element> jvmEles = server.elements("jvm");
Element jvmOptElement = null;
if (jvmEles != null && jvmEles.size() > 0) {
List<Element> jvmOptionEles = jvmEles.get(0).elements();
if (jvmOptionEles.size() > 0) {
jvmOptElement = jvmOptionEles.get(0);
List<Element> options = jvmOptElement.elements("option");
if(options != null && options.size() > 0) {
for(Element option: options) {
String value = option.attributeValue("value");
if(value != null && value.contains("agent.jar")) {
continue;
}else {
createOptionElement(jvmOptElement);
break;
}
}
}else {
createOptionElement(jvmOptElement);
}
} else {
jvmOptElement = jvmEles.get(0).addElement("jvm-options");
createOptionElement(jvmOptElement);
}
} else {
Element jvmEle = server.addElement("jvm");
jvmEle.addAttribute("name", "default");
jvmOptElement = jvmEle.addElement("jvm-options");
createOptionElement(jvmOptElement);
}
}
}
}
private void createOptionElement(Element jvmOptElement) {
Element optionEle = jvmOptElement.addElement("option");
optionEle.addAttribute("value", JAVAAGENT_E_AGENT_JAR_AGENT_JAR_E_AGENT_JAR);
}
private void createProertyElement(Element sysEle) {
Element proElement = sysEle.addElement("property");
proElement.addAttribute("name", JBOSS_MODULES_SYSTEM_PKGS);
proElement.addAttribute("value", "org.javaRasp");
proElement.addAttribute("boot-time", "true");
}
/**
* 通过document对象将内存中的dom树保存到新的xml文档。
*
* @param document
* @throws Exception
*/
private void writeToNewXMLDocument(Document document) throws Exception {
//设置文件编码
OutputFormat xmlFormat = new OutputFormat();
xmlFormat.setEncoding("UTF-8");
// 设置换行
xmlFormat.setNewlines(true);
// 生成缩进
xmlFormat.setIndent(true);
// 使用4个空格进行缩进, 可以兼容文本编辑器
xmlFormat.setIndent(" ");
XMLWriter writer = new XMLWriter(new FileWriter(getHostXmlPath()), xmlFormat);
writer.write(document);
writer.close();
}
/**
* 该方法用于得到document对象。
*
* @return
* @throws Exception
*/
private Document getDocument() throws Exception {
SAXReader sr = new SAXReader();
Document document = sr.read(getHostXmlPath());
return document;
}
/***************************************************/
// public static void main(String args[]) throws Exception {
// System.setProperty("user.dir","E:\\agent_jar");
// Dom4j2ParseXml d = new Dom4j2ParseXml("E:\\jboss-as-7.1.1.Final_Rasp\\domain\\configuration\\host.xml");
//
// }
/***************************************************/
public String getHostXmlPath() {
return hostXmlPath;
}
public void setHostXmlPath(String hostXmlPath) {
this.hostXmlPath = hostXmlPath;
}
}
dom4jUtils
最新推荐文章于 2021-02-13 16:15:13 发布