Skip to content

Commit c76ac87

Browse files
committed
refactor: loadResource
1 parent 718ae2e commit c76ac87

19 files changed

+93
-93
lines changed

packer/src/main/java/com/reajason/javaweb/packer/Packers.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ public enum Packers {
113113
Aviator(new AviatorPacker()),
114114

115115
JXPath(new JXPathPacker()),
116+
JXPathScriptEngine(new JXPathScriptEnginePacker(), JXPathPacker.class),
116117
JXPathSpringGzip(new JXPathSpringGzipPacker(), JXPathPacker.class),
117118
JXPathSpringGzipJDK17(new JXPathSpringGzipJDK17Packer(), JXPathPacker.class),
118119

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.reajason.javaweb.packer;
2+
3+
import lombok.SneakyThrows;
4+
import org.apache.commons.io.IOUtils;
5+
6+
import java.io.InputStream;
7+
import java.nio.charset.Charset;
8+
import java.util.Objects;
9+
10+
/**
11+
* @author ReaJason
12+
* @since 2025/9/1
13+
*/
14+
public class Util {
15+
16+
@SneakyThrows
17+
public static String loadTemplateFromResource(String resourceName) {
18+
try (InputStream stream = Util.class.getResourceAsStream(resourceName)) {
19+
return IOUtils.toString(Objects.requireNonNull(stream), Charset.defaultCharset());
20+
}
21+
}
22+
}

packer/src/main/java/com/reajason/javaweb/packer/XxlJobPacker.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,8 @@
1616
* @since 2025/1/21
1717
*/
1818
public class XxlJobPacker implements Packer {
19-
String template = "";
20-
21-
public XxlJobPacker() {
22-
try {
23-
template = IOUtils.toString(Objects.requireNonNull(this.getClass().getResourceAsStream("/XXL-Job-DefineClass.java")), Charset.defaultCharset());
24-
} catch (IOException ignored) {
25-
26-
}
27-
}
19+
private final String template = Util.loadTemplateFromResource("/memshell-party/XXL-Job-DefineClass.java");
20+
private final ObjectMapper objectMapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);
2821

2922
@Override
3023
@SneakyThrows
@@ -44,8 +37,6 @@ public String pack(ClassPackerConfig config) {
4437
map.put("glueUpdatetime", System.currentTimeMillis());
4538
map.put("broadcastIndex", 0);
4639
map.put("broadcastTotal", 0);
47-
ObjectMapper objectMapper = new ObjectMapper();
48-
objectMapper.enable(SerializationFeature.INDENT_OUTPUT); // 美化输出
4940
return objectMapper.writeValueAsString(map);
5041
}
5142
}

packer/src/main/java/com/reajason/javaweb/packer/groovy/GroovyClassDefinerPacker.java

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,15 @@
22

33
import com.reajason.javaweb.packer.ClassPackerConfig;
44
import com.reajason.javaweb.packer.Packer;
5+
import com.reajason.javaweb.packer.Util;
56
import lombok.SneakyThrows;
6-
import org.apache.commons.io.IOUtils;
7-
8-
import java.io.IOException;
9-
import java.nio.charset.Charset;
10-
import java.util.Objects;
117

128
/**
139
* @author ReaJason
1410
* @since 2025/5/11
1511
*/
1612
public class GroovyClassDefinerPacker implements Packer {
17-
String template = null;
18-
19-
public GroovyClassDefinerPacker() {
20-
try {
21-
template = IOUtils.toString(Objects.requireNonNull(this.getClass().getResourceAsStream("/shell.groovy")), Charset.defaultCharset());
22-
} catch (IOException ignored) {
23-
24-
}
25-
}
13+
private final String template = Util.loadTemplateFromResource("/memshell-party/shell.groovy");
2614

2715
@Override
2816
@SneakyThrows

packer/src/main/java/com/reajason/javaweb/packer/jsp/ClassLoaderJspPacker.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.reajason.javaweb.packer.ClassPackerConfig;
44
import com.reajason.javaweb.packer.Packer;
5+
import com.reajason.javaweb.packer.Util;
56
import lombok.SneakyThrows;
67
import org.apache.commons.io.IOUtils;
78

@@ -14,15 +15,7 @@
1415
*/
1516
public class ClassLoaderJspPacker implements Packer {
1617

17-
String jspTemplate = null;
18-
19-
public ClassLoaderJspPacker() {
20-
try {
21-
jspTemplate = IOUtils.toString(Objects.requireNonNull(this.getClass().getResourceAsStream("/shell.jsp")), Charset.defaultCharset());
22-
} catch (Exception ignored) {
23-
24-
}
25-
}
18+
private final String jspTemplate = Util.loadTemplateFromResource("/memshell-party/shell.jsp");
2619

2720
@Override
2821
@SneakyThrows

packer/src/main/java/com/reajason/javaweb/packer/jsp/DefineClassJspPacker.java

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,17 @@
22

33
import com.reajason.javaweb.packer.ClassPackerConfig;
44
import com.reajason.javaweb.packer.Packer;
5+
import com.reajason.javaweb.packer.Util;
56
import lombok.SneakyThrows;
6-
import org.apache.commons.io.IOUtils;
7-
8-
import java.nio.charset.Charset;
9-
import java.util.Objects;
107

118
/**
129
* @author ReaJason
1310
* @since 2024/11/26
1411
*/
1512
public class DefineClassJspPacker implements Packer {
1613

17-
String template = null;
18-
String bypassTemplate = null;
19-
20-
public DefineClassJspPacker() {
21-
try {
22-
template = IOUtils.toString(Objects.requireNonNull(this.getClass().getResourceAsStream("/shell1.jsp")), Charset.defaultCharset());
23-
bypassTemplate = IOUtils.toString(Objects.requireNonNull(this.getClass().getResourceAsStream("/shell2.jsp")), Charset.defaultCharset());
24-
} catch (Exception ignored) {
25-
26-
}
27-
}
14+
private final String template = Util.loadTemplateFromResource("/memshell-party/shell1.jsp");
15+
private final String bypassTemplate = Util.loadTemplateFromResource("/memshell-party/shell2.jsp");
2816

2917
@Override
3018
@SneakyThrows

packer/src/main/java/com/reajason/javaweb/packer/jsp/JspxPacker.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.reajason.javaweb.packer.ClassPackerConfig;
44
import com.reajason.javaweb.packer.Packer;
5+
import com.reajason.javaweb.packer.Util;
56
import lombok.SneakyThrows;
67
import org.apache.commons.io.IOUtils;
78

@@ -14,15 +15,7 @@
1415
*/
1516
public class JspxPacker implements Packer {
1617

17-
String jspxTemplate = null;
18-
19-
public JspxPacker() {
20-
try {
21-
jspxTemplate = IOUtils.toString(Objects.requireNonNull(this.getClass().getResourceAsStream("/shell.jspx")), Charset.defaultCharset());
22-
} catch (Exception ignored) {
23-
24-
}
25-
}
18+
private final String jspxTemplate = Util.loadTemplateFromResource("/memshell-party/shell.jspx");
2619

2720
@Override
2821
@SneakyThrows

packer/src/main/java/com/reajason/javaweb/packer/scriptengine/DefaultScriptEnginePacker.java

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,22 @@
22

33
import com.reajason.javaweb.packer.ClassPackerConfig;
44
import com.reajason.javaweb.packer.Packer;
5+
import com.reajason.javaweb.packer.Util;
56
import lombok.SneakyThrows;
6-
import org.apache.commons.io.IOUtils;
7-
8-
import java.io.IOException;
9-
import java.nio.charset.Charset;
10-
import java.util.Objects;
117

128
public class DefaultScriptEnginePacker implements Packer {
13-
String jsTemplate = null;
14-
15-
public DefaultScriptEnginePacker() {
16-
try {
17-
jsTemplate = IOUtils.toString(Objects.requireNonNull(this.getClass().getResourceAsStream("/DefaultScriptEngine.js")), Charset.defaultCharset());
18-
} catch (IOException ignored) {
19-
20-
}
21-
}
9+
private final String jsTemplate = Util.loadTemplateFromResource("/memshell-party/ScriptEngine.js");
2210

2311
@Override
2412
@SneakyThrows
2513
public String pack(ClassPackerConfig config) {
26-
return jsTemplate
14+
return scriptToSingleLine(jsTemplate
2715
.replace("{{className}}", config.getClassName())
28-
.replace("{{base64Str}}", config.getClassBytesBase64Str())
29-
.replace("\n", "")
16+
.replace("{{base64Str}}", config.getClassBytesBase64Str()));
17+
}
18+
19+
public static String scriptToSingleLine(String script) {
20+
return script.replace("\n", "")
3021
.replaceAll("(?m)^[ \t]+|[ \t]+$", "")
3122
.replaceAll("[ \t]{2,}", " ");
3223
}

packer/src/main/java/com/reajason/javaweb/packer/scriptengine/ScriptEngineBigIntegerPacker.java

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,19 @@
33
import com.reajason.javaweb.packer.ClassPackerConfig;
44
import com.reajason.javaweb.packer.Packer;
55
import com.reajason.javaweb.packer.Packers;
6+
import com.reajason.javaweb.packer.Util;
67
import lombok.SneakyThrows;
7-
import org.apache.commons.io.IOUtils;
88

9-
import java.io.IOException;
10-
import java.nio.charset.Charset;
11-
import java.util.Objects;
9+
import static com.reajason.javaweb.packer.scriptengine.DefaultScriptEnginePacker.scriptToSingleLine;
1210

1311
public class ScriptEngineBigIntegerPacker implements Packer {
14-
String jsTemplate = null;
15-
16-
public ScriptEngineBigIntegerPacker() {
17-
try {
18-
jsTemplate = IOUtils.toString(Objects.requireNonNull(this.getClass().getResourceAsStream("/ScriptEngineBigInteger.js")), Charset.defaultCharset());
19-
} catch (IOException ignored) {
20-
21-
}
22-
}
12+
private final String jsTemplate = Util.loadTemplateFromResource("/memshell-party/ScriptEngineBigInteger.js");
2313

2414
@Override
2515
@SneakyThrows
2616
public String pack(ClassPackerConfig config) {
27-
return jsTemplate
17+
return scriptToSingleLine(jsTemplate
2818
.replace("{{className}}", config.getClassName())
29-
.replace("{{bigIntegerStr}}", Packers.BigInteger.getInstance().pack(config))
30-
.replace("\n", "")
31-
.replaceAll("(?m)^[ \t]+|[ \t]+$", "")
32-
.replaceAll("[ \t]{2,}", " ");
19+
.replace("{{bigIntegerStr}}", Packers.BigInteger.getInstance().pack(config)));
3320
}
3421
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.reajason.javaweb.packer.scriptengine;
2+
3+
import com.reajason.javaweb.packer.ClassPackerConfig;
4+
import com.reajason.javaweb.packer.Packer;
5+
import com.reajason.javaweb.packer.Util;
6+
import lombok.SneakyThrows;
7+
8+
public class ScriptEngineNoSquareBracketsPacker implements Packer {
9+
private final String jsTemplate = Util.loadTemplateFromResource("/memshell-party/ScriptEngineNoSquareBrackets.js");
10+
11+
@Override
12+
@SneakyThrows
13+
public String pack(ClassPackerConfig config) {
14+
return scriptToSingleLine(jsTemplate
15+
.replace("{{className}}", config.getClassName())
16+
.replace("{{base64Str}}", config.getClassBytesBase64Str()));
17+
}
18+
19+
public static String scriptToSingleLine(String script) {
20+
return script.replace("\n", "")
21+
.replaceAll("(?m)^[ \t]+|[ \t]+$", "")
22+
.replaceAll("[ \t]{2,}", " ");
23+
}
24+
}

0 commit comments

Comments
 (0)