From f33972e46024f2fa6bc9d803d7975b2c6869b219 Mon Sep 17 00:00:00 2001 From: ReaJason Date: Tue, 26 Aug 2025 00:25:21 +0800 Subject: [PATCH] refactor: simplify config build --- .../boot/controller/ConfigController.java | 6 +-- .../boot/dto/MemShellGenerateRequest.java | 20 +++++----- .../memshell/config/AntSwordConfig.java | 30 ++++++++++++++- .../memshell/config/BehinderConfig.java | 30 ++++++++++++++- .../memshell/config/CommandConfig.java | 12 ++++++ .../memshell/config/GodzillaConfig.java | 38 ++++++++++++++++++- .../memshell/config/NeoreGeorgConfig.java | 21 ++++++++++ .../memshell/config/ShellToolConfig.java | 2 +- .../javaweb/memshell/config/Suo5Config.java | 21 ++++++++++ .../memshell/config/AntSwordConfigTest.java | 35 +++++++++++++++++ .../memshell/config/BehinderConfigTest.java | 24 ++++++++++++ .../memshell/config/GodzillaConfigTest.java | 26 +++++++++++++ 12 files changed, 247 insertions(+), 18 deletions(-) create mode 100644 generator/src/test/java/com/reajason/javaweb/memshell/config/AntSwordConfigTest.java create mode 100644 generator/src/test/java/com/reajason/javaweb/memshell/config/BehinderConfigTest.java create mode 100644 generator/src/test/java/com/reajason/javaweb/memshell/config/GodzillaConfigTest.java diff --git a/boot/src/main/java/com/reajason/javaweb/boot/controller/ConfigController.java b/boot/src/main/java/com/reajason/javaweb/boot/controller/ConfigController.java index 9c20a0c6..b6d42c6f 100644 --- a/boot/src/main/java/com/reajason/javaweb/boot/controller/ConfigController.java +++ b/boot/src/main/java/com/reajason/javaweb/boot/controller/ConfigController.java @@ -26,7 +26,8 @@ public class ConfigController { Map> servers = new LinkedHashMap<>(); List supportedServers = ServerFactory.getSupportedServers(); for (String supportedServer : supportedServers) { - Set supportedShellTypes = ServerFactory.getServer(supportedServer).getShellInjectorMapping().getSupportedShellTypes(); + Set supportedShellTypes = ServerFactory.getServer(supportedServer) + .getShellInjectorMapping().getSupportedShellTypes(); servers.put(supportedServer, supportedShellTypes.stream().toList()); } return servers; @@ -45,9 +46,6 @@ public class ConfigController { List supportedServers = ServerFactory.getSupportedServers(); for (String supportedServer : supportedServers) { AbstractServer server = ServerFactory.getServer(supportedServer); - if (server == null) { - continue; - } Map> map = new LinkedHashMap<>(16); for (String shellTool : server.getSupportedShellTools()) { Set supportedShellTypes = server.getSupportedShellTypes(shellTool); diff --git a/boot/src/main/java/com/reajason/javaweb/boot/dto/MemShellGenerateRequest.java b/boot/src/main/java/com/reajason/javaweb/boot/dto/MemShellGenerateRequest.java index ab3e44af..70a3eee0 100644 --- a/boot/src/main/java/com/reajason/javaweb/boot/dto/MemShellGenerateRequest.java +++ b/boot/src/main/java/com/reajason/javaweb/boot/dto/MemShellGenerateRequest.java @@ -38,38 +38,38 @@ public class MemShellGenerateRequest { return switch (shellConfig.getShellTool()) { case Godzilla -> GodzillaConfig.builder() .shellClassName(shellToolConfig.getShellClassName()) - .pass(StringUtils.defaultIfBlank(shellToolConfig.getGodzillaPass(), CommonUtil.getRandomString(8))) - .key(StringUtils.defaultIfBlank(shellToolConfig.getGodzillaKey(), CommonUtil.getRandomString(8))) + .pass(shellToolConfig.getGodzillaPass()) + .key(shellToolConfig.getGodzillaKey()) .headerName(shellToolConfig.getHeaderName()) - .headerValue(StringUtils.defaultIfBlank(shellToolConfig.getHeaderValue(), CommonUtil.getRandomString(8))) + .headerValue(shellToolConfig.getHeaderValue()) .build(); case Behinder -> BehinderConfig.builder() .shellClassName(shellToolConfig.getShellClassName()) - .pass(StringUtils.defaultIfBlank(shellToolConfig.getBehinderPass(), CommonUtil.getRandomString(8))) + .pass(shellToolConfig.getBehinderPass()) .headerName(shellToolConfig.getHeaderName()) - .headerValue(StringUtils.defaultIfBlank(shellToolConfig.getHeaderValue(), CommonUtil.getRandomString(8))) + .headerValue(shellToolConfig.getHeaderValue()) .build(); case Command -> CommandConfig.builder() .shellClassName(shellToolConfig.getShellClassName()) - .paramName(StringUtils.defaultIfBlank(shellToolConfig.getCommandParamName(), CommonUtil.getRandomString(8))) + .paramName(shellToolConfig.getCommandParamName()) .encryptor(CommandConfig.Encryptor.fromString(shellToolConfig.getEncryptor())) .implementationClass(CommandConfig.ImplementationClass.fromString(shellToolConfig.getImplementationClass())) .build(); case Suo5 -> Suo5Config.builder() .shellClassName(shellToolConfig.getShellClassName()) .headerName(shellToolConfig.getHeaderName()) - .headerValue(StringUtils.defaultIfBlank(shellToolConfig.getHeaderValue(), CommonUtil.getRandomString(8))) + .headerValue(shellToolConfig.getHeaderValue()) .build(); case AntSword -> AntSwordConfig.builder() .shellClassName(shellToolConfig.getShellClassName()) - .pass(StringUtils.defaultIfBlank(shellToolConfig.getAntSwordPass(), CommonUtil.getRandomString(8))) + .pass(shellToolConfig.getAntSwordPass()) .headerName(shellToolConfig.getHeaderName()) - .headerValue(StringUtils.defaultIfBlank(shellToolConfig.getHeaderValue(), CommonUtil.getRandomString(8))) + .headerValue(shellToolConfig.getHeaderValue()) .build(); case NeoreGeorg -> NeoreGeorgConfig.builder() .shellClassName(shellToolConfig.getShellClassName()) .headerName(shellToolConfig.getHeaderName()) - .headerValue(StringUtils.defaultIfBlank(shellToolConfig.getHeaderValue(), CommonUtil.getRandomString(8))) + .headerValue(shellToolConfig.getHeaderValue()) .build(); case Custom -> CustomConfig.builder() .shellClassBase64(shellToolConfig.getShellClassBase64()) diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/config/AntSwordConfig.java b/generator/src/main/java/com/reajason/javaweb/memshell/config/AntSwordConfig.java index de3a428e..f76bf4da 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/config/AntSwordConfig.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/config/AntSwordConfig.java @@ -3,13 +3,14 @@ package com.reajason.javaweb.memshell.config; import com.reajason.javaweb.utils.CommonUtil; import lombok.*; import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.StringUtils; /** * @author ReaJason * @since 2024/12/21 */ @Getter -@SuperBuilder +@SuperBuilder(toBuilder = true) @NoArgsConstructor @AllArgsConstructor @ToString @@ -20,4 +21,31 @@ public class AntSwordConfig extends ShellToolConfig { private String headerName = "User-Agent"; @Builder.Default private String headerValue = CommonUtil.getRandomString(8); + + public static abstract class AntSwordConfigBuilder> + extends ShellToolConfig.ShellToolConfigBuilder { + public B pass(final String pass) { + if (StringUtils.isNotBlank(pass)) { + this.pass$value = pass; + pass$set = true; + } + return self(); + } + + public B headerName(final String headerName) { + if (StringUtils.isNotBlank(headerName)) { + this.headerName$value = headerName; + headerName$set = true; + } + return self(); + } + + public B headerValue(final String headerValue) { + if (StringUtils.isNotBlank(headerValue)) { + this.headerValue$value = headerValue; + headerValue$set = true; + } + return self(); + } + } } diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/config/BehinderConfig.java b/generator/src/main/java/com/reajason/javaweb/memshell/config/BehinderConfig.java index 2220bfb4..36b7e039 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/config/BehinderConfig.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/config/BehinderConfig.java @@ -3,13 +3,14 @@ package com.reajason.javaweb.memshell.config; import com.reajason.javaweb.utils.CommonUtil; import lombok.*; import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.StringUtils; /** * @author ReaJason * @since 2024/12/21 */ @Getter -@SuperBuilder +@SuperBuilder(toBuilder = true) @NoArgsConstructor @AllArgsConstructor @ToString @@ -20,4 +21,31 @@ public class BehinderConfig extends ShellToolConfig { private String headerName = "User-Agent"; @Builder.Default private String headerValue = CommonUtil.getRandomString(8); + + public static abstract class BehinderConfigBuilder> + extends ShellToolConfig.ShellToolConfigBuilder { + public B pass(final String pass) { + if (StringUtils.isNotBlank(pass)) { + this.pass$value = pass; + pass$set = true; + } + return self(); + } + + public B headerName(final String headerName) { + if (StringUtils.isNotBlank(headerName)) { + this.headerName$value = headerName; + headerName$set = true; + } + return self(); + } + + public B headerValue(final String headerValue) { + if (StringUtils.isNotBlank(headerValue)) { + this.headerValue$value = headerValue; + headerValue$set = true; + } + return self(); + } + } } diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/config/CommandConfig.java b/generator/src/main/java/com/reajason/javaweb/memshell/config/CommandConfig.java index 37136dd5..6cd1091a 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/config/CommandConfig.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/config/CommandConfig.java @@ -5,6 +5,7 @@ import lombok.Builder; import lombok.Getter; import lombok.ToString; import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.StringUtils; /** * @author ReaJason @@ -23,6 +24,17 @@ public class CommandConfig extends ShellToolConfig { @Builder.Default private ImplementationClass implementationClass = ImplementationClass.RuntimeExec; + public static abstract class CommandConfigBuilder> + extends ShellToolConfig.ShellToolConfigBuilder { + public B paramName(String paramName) { + if (StringUtils.isNotBlank(paramName)) { + paramName$value = paramName; + paramName$set = true; + } + return self(); + } + } + public enum ImplementationClass { RuntimeExec, ForkAndExec; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/config/GodzillaConfig.java b/generator/src/main/java/com/reajason/javaweb/memshell/config/GodzillaConfig.java index f7ff177f..d278fedd 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/config/GodzillaConfig.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/config/GodzillaConfig.java @@ -3,13 +3,14 @@ package com.reajason.javaweb.memshell.config; import com.reajason.javaweb.utils.CommonUtil; import lombok.*; import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.StringUtils; /** * @author ReaJason * @since 2024/11/24 */ @Getter -@SuperBuilder +@SuperBuilder(toBuilder = true) @NoArgsConstructor @AllArgsConstructor @ToString @@ -22,4 +23,39 @@ public class GodzillaConfig extends ShellToolConfig { private String headerName = "User-Agent"; @Builder.Default private String headerValue = CommonUtil.getRandomString(8); + + public static abstract class GodzillaConfigBuilder> + extends ShellToolConfig.ShellToolConfigBuilder { + public B pass(final String pass) { + if (StringUtils.isNotBlank(pass)) { + this.pass$value = pass; + pass$set = true; + } + return self(); + } + + public B key(final String key) { + if (StringUtils.isNotBlank(key)) { + this.key$value = key; + key$set = true; + } + return self(); + } + + public B headerName(final String headerName) { + if (StringUtils.isNotBlank(headerName)) { + this.headerName$value = headerName; + headerName$set = true; + } + return self(); + } + + public B headerValue(final String headerValue) { + if (StringUtils.isNotBlank(headerValue)) { + this.headerValue$value = headerValue; + headerValue$set = true; + } + return self(); + } + } } \ No newline at end of file diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/config/NeoreGeorgConfig.java b/generator/src/main/java/com/reajason/javaweb/memshell/config/NeoreGeorgConfig.java index 8079e8de..95431465 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/config/NeoreGeorgConfig.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/config/NeoreGeorgConfig.java @@ -3,6 +3,7 @@ package com.reajason.javaweb.memshell.config; import com.reajason.javaweb.utils.CommonUtil; import lombok.*; import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.StringUtils; /** * @author ReaJason @@ -18,4 +19,24 @@ public class NeoreGeorgConfig extends ShellToolConfig { private String headerName = "Referer"; @Builder.Default private String headerValue = CommonUtil.getRandomString(8); + + public static abstract class NeoreGeorgConfigBuilder> + extends ShellToolConfig.ShellToolConfigBuilder { + + public B headerName(final String headerName) { + if (StringUtils.isNotBlank(headerName)) { + this.headerName$value = headerName; + headerName$set = true; + } + return self(); + } + + public B headerValue(final String headerValue) { + if (StringUtils.isNotBlank(headerValue)) { + this.headerValue$value = headerValue; + headerValue$set = true; + } + return self(); + } + } } \ No newline at end of file diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/config/ShellToolConfig.java b/generator/src/main/java/com/reajason/javaweb/memshell/config/ShellToolConfig.java index 388cbb71..767ee922 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/config/ShellToolConfig.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/config/ShellToolConfig.java @@ -10,7 +10,7 @@ import lombok.experimental.SuperBuilder; * @since 2024/11/24 */ @Data -@SuperBuilder +@SuperBuilder(toBuilder = true) @NoArgsConstructor @AllArgsConstructor public class ShellToolConfig { diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/config/Suo5Config.java b/generator/src/main/java/com/reajason/javaweb/memshell/config/Suo5Config.java index 2f5cdfa0..26130151 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/config/Suo5Config.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/config/Suo5Config.java @@ -3,6 +3,7 @@ package com.reajason.javaweb.memshell.config; import com.reajason.javaweb.utils.CommonUtil; import lombok.*; import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.StringUtils; /** * @author ReaJason @@ -18,4 +19,24 @@ public class Suo5Config extends ShellToolConfig { private String headerName = "User-Agent"; @Builder.Default private String headerValue = CommonUtil.getRandomString(8); + + public static abstract class Suo5ConfigBuilder> + extends ShellToolConfig.ShellToolConfigBuilder { + + public B headerName(final String headerName) { + if (StringUtils.isNotBlank(headerName)) { + this.headerName$value = headerName; + headerName$set = true; + } + return self(); + } + + public B headerValue(final String headerValue) { + if (StringUtils.isNotBlank(headerValue)) { + this.headerValue$value = headerValue; + headerValue$set = true; + } + return self(); + } + } } \ No newline at end of file diff --git a/generator/src/test/java/com/reajason/javaweb/memshell/config/AntSwordConfigTest.java b/generator/src/test/java/com/reajason/javaweb/memshell/config/AntSwordConfigTest.java new file mode 100644 index 00000000..1aad63dd --- /dev/null +++ b/generator/src/test/java/com/reajason/javaweb/memshell/config/AntSwordConfigTest.java @@ -0,0 +1,35 @@ +package com.reajason.javaweb.memshell.config; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +/** + * @author ReaJason + * @since 2025/8/26 + */ +class AntSwordConfigTest { + + @Test + void test() { + AntSwordConfig antSwordConfig = AntSwordConfig.builder() + .pass("") + .headerName(null) + .headerValue("").build(); + assertNotNull(antSwordConfig.getPass()); + assertNotNull(antSwordConfig.getHeaderName()); + assertNotNull(antSwordConfig.getHeaderValue()); + } + + @Test + void testInit(){ + AntSwordConfig antSwordConfig = AntSwordConfig.builder() + .pass("pass") + .headerName("ua") + .headerValue("v").build(); + assertEquals("pass", antSwordConfig.getPass()); + assertEquals("ua", antSwordConfig.getHeaderName()); + assertEquals("v", antSwordConfig.getHeaderValue()); + } +} \ No newline at end of file diff --git a/generator/src/test/java/com/reajason/javaweb/memshell/config/BehinderConfigTest.java b/generator/src/test/java/com/reajason/javaweb/memshell/config/BehinderConfigTest.java new file mode 100644 index 00000000..2243f7e0 --- /dev/null +++ b/generator/src/test/java/com/reajason/javaweb/memshell/config/BehinderConfigTest.java @@ -0,0 +1,24 @@ +package com.reajason.javaweb.memshell.config; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +/** + * @author ReaJason + * @since 2025/8/26 + */ +class BehinderConfigTest { + + @Test + void test() { + BehinderConfig behinderConfig = BehinderConfig.builder() + .pass(null) + .headerName("") + .headerValue("").build(); + assertNotNull(behinderConfig.getPass()); + assertNotNull(behinderConfig.getHeaderName()); + assertNotNull(behinderConfig.getHeaderValue()); + } + +} \ No newline at end of file diff --git a/generator/src/test/java/com/reajason/javaweb/memshell/config/GodzillaConfigTest.java b/generator/src/test/java/com/reajason/javaweb/memshell/config/GodzillaConfigTest.java new file mode 100644 index 00000000..689e1f99 --- /dev/null +++ b/generator/src/test/java/com/reajason/javaweb/memshell/config/GodzillaConfigTest.java @@ -0,0 +1,26 @@ +package com.reajason.javaweb.memshell.config; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +/** + * @author ReaJason + * @since 2025/8/25 + */ +class GodzillaConfigTest { + + @Test + void testNull() { + GodzillaConfig godzillaConfig = GodzillaConfig.builder() + .pass(null) + .key("") + .headerName(null) + .headerValue("") + .build(); + assertNotNull(godzillaConfig.getPass()); + assertNotNull(godzillaConfig.getKey()); + assertNotNull(godzillaConfig.getHeaderName()); + assertNotNull(godzillaConfig.getHeaderValue()); + } +} \ No newline at end of file