mirror of
https://github.com/ReaJason/MemShellParty.git
synced 2026-09-22 07:00:43 +08:00
refactor: simplify valve shell register
This commit is contained in:
@@ -0,0 +1,135 @@
|
||||
package com.reajason.javaweb.memshell.generator;
|
||||
|
||||
import com.reajason.javaweb.memshell.ShellTool;
|
||||
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordValve;
|
||||
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderValve;
|
||||
import com.reajason.javaweb.memshell.shelltool.command.CommandValve;
|
||||
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaValve;
|
||||
import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Valve;
|
||||
import com.reajason.javaweb.memshell.utils.CommonUtil;
|
||||
import com.tongweb.web.thor.comet.CometEvent;
|
||||
import com.tongweb.web.thor.connector.Request;
|
||||
import com.tongweb.web.thor.connector.Response;
|
||||
import net.bytebuddy.ByteBuddy;
|
||||
import net.bytebuddy.asm.AsmVisitorWrapper;
|
||||
import net.bytebuddy.description.field.FieldDescription;
|
||||
import net.bytebuddy.description.field.FieldList;
|
||||
import net.bytebuddy.description.method.MethodList;
|
||||
import net.bytebuddy.description.modifier.Visibility;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.dynamic.DynamicType;
|
||||
import net.bytebuddy.dynamic.loading.ClassLoadingStrategy;
|
||||
import net.bytebuddy.implementation.FixedValue;
|
||||
import net.bytebuddy.implementation.Implementation;
|
||||
import net.bytebuddy.jar.asm.ClassVisitor;
|
||||
import net.bytebuddy.jar.asm.commons.ClassRemapper;
|
||||
import net.bytebuddy.jar.asm.commons.Remapper;
|
||||
import net.bytebuddy.pool.TypePool;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2025/2/22
|
||||
*/
|
||||
public class ValveGenerator {
|
||||
|
||||
public static final String CATALINA_VALVE_PACKAGE = "org.apache.catalina";
|
||||
public static final String BES_VALVE_PACKAGE = "com.bes.enterprise.webtier";
|
||||
public static final String TONGWEB6_VALVE_PACKAGE = "com.tongweb.web.thor";
|
||||
public static final String TONGWEB7_VALVE_PACKAGE = "com.tongweb.catalina";
|
||||
|
||||
public static class ValveRenameVisitorWrapper implements AsmVisitorWrapper {
|
||||
private final String newPackageName;
|
||||
|
||||
public ValveRenameVisitorWrapper(String newPackageName) {
|
||||
this.newPackageName = newPackageName.replace('.', '/');
|
||||
}
|
||||
|
||||
@Override
|
||||
public int mergeReader(int flags) {
|
||||
return flags;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int mergeWriter(int flags) {
|
||||
return flags;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public ClassVisitor wrap(@NotNull TypeDescription instrumentedType,
|
||||
@NotNull ClassVisitor classVisitor,
|
||||
@NotNull Implementation.Context implementationContext,
|
||||
@NotNull TypePool typePool,
|
||||
@NotNull FieldList<FieldDescription.InDefinedShape> fields,
|
||||
@NotNull MethodList<?> methods,
|
||||
int writerFlags,
|
||||
int readerFlags) {
|
||||
return new ClassRemapper(
|
||||
classVisitor,
|
||||
new Remapper() {
|
||||
@Override
|
||||
public String map(String typeName) {
|
||||
String packageName = CATALINA_VALVE_PACKAGE.replace(".", "/");
|
||||
if (typeName.startsWith(packageName)) {
|
||||
return typeName.replace(packageName, newPackageName);
|
||||
} else {
|
||||
return typeName;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public static Class<?> generateValveClass(String packageName, ShellTool shellTool) {
|
||||
Class<?> targetClass = null;
|
||||
switch (shellTool) {
|
||||
case Suo5:
|
||||
targetClass = Suo5Valve.class;
|
||||
break;
|
||||
case Godzilla:
|
||||
targetClass = GodzillaValve.class;
|
||||
break;
|
||||
case Behinder:
|
||||
targetClass = BehinderValve.class;
|
||||
break;
|
||||
case AntSword:
|
||||
targetClass = AntSwordValve.class;
|
||||
break;
|
||||
case Command:
|
||||
targetClass = CommandValve.class;
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("Unknown shell tool: " + shellTool);
|
||||
}
|
||||
String newClassName = targetClass.getName() + CommonUtil.getRandomString(5);
|
||||
|
||||
DynamicType.Builder<?> builder = new ByteBuddy()
|
||||
.redefine(targetClass)
|
||||
.name(newClassName)
|
||||
.visit(new ValveRenameVisitorWrapper(packageName));
|
||||
|
||||
if (TONGWEB6_VALVE_PACKAGE.equals(packageName)) {
|
||||
builder = builder
|
||||
.defineMethod("getInfo", String.class, Visibility.PUBLIC)
|
||||
.intercept(FixedValue.value(""))
|
||||
.defineMethod("event", void.class, Visibility.PUBLIC)
|
||||
.withParameters(Request.class, Response.class, CometEvent.class)
|
||||
.intercept(FixedValue.originType());
|
||||
}
|
||||
|
||||
|
||||
try (DynamicType.Unloaded<?> unloaded = builder.make()) {
|
||||
return unloaded.load(ValveGenerator.class.getClassLoader(), ClassLoadingStrategy.Default.WRAPPER_PERSISTENT).getLoaded();
|
||||
}
|
||||
}
|
||||
|
||||
private static Class<?> generateClass(String className) {
|
||||
try (DynamicType.Unloaded<Object> unloaded = new ByteBuddy()
|
||||
.subclass(Object.class)
|
||||
.name(className)
|
||||
.make()) {
|
||||
return unloaded.load(ValveGenerator.class.getClassLoader(), ClassLoadingStrategy.Default.WRAPPER_PERSISTENT).getLoaded();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,9 @@
|
||||
package com.reajason.javaweb.memshell.server;
|
||||
|
||||
import com.reajason.javaweb.memshell.ShellTool;
|
||||
import com.reajason.javaweb.memshell.bes.antsword.AntSwordValve;
|
||||
import com.reajason.javaweb.memshell.bes.behinder.BehinderValve;
|
||||
import com.reajason.javaweb.memshell.bes.command.CommandValve;
|
||||
import com.reajason.javaweb.memshell.bes.godzilla.GodzillaValve;
|
||||
import com.reajason.javaweb.memshell.bes.injector.*;
|
||||
import com.reajason.javaweb.memshell.bes.suo5.Suo5Valve;
|
||||
import com.reajason.javaweb.memshell.generator.ListenerGenerator;
|
||||
import com.reajason.javaweb.memshell.generator.ValveGenerator;
|
||||
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter;
|
||||
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor;
|
||||
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter;
|
||||
@@ -42,7 +38,7 @@ public class BesShell extends AbstractShell {
|
||||
addToolMapping(ShellTool.Command, ToolMapping.builder()
|
||||
.addShellClass(FILTER, CommandFilter.class)
|
||||
.addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Command))
|
||||
.addShellClass(VALVE, CommandValve.class)
|
||||
.addShellClass(VALVE, ValveGenerator.generateValveClass(ValveGenerator.BES_VALVE_PACKAGE, ShellTool.Command))
|
||||
.addShellClass(AGENT_FILTER_CHAIN, CommandFilterChainAdvisor.class)
|
||||
.addShellClass(CATALINA_AGENT_CONTEXT_VALVE, CommandFilterChainAdvisor.class)
|
||||
.build());
|
||||
@@ -50,7 +46,7 @@ public class BesShell extends AbstractShell {
|
||||
addToolMapping(ShellTool.Godzilla, ToolMapping.builder()
|
||||
.addShellClass(FILTER, GodzillaFilter.class)
|
||||
.addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Godzilla))
|
||||
.addShellClass(VALVE, GodzillaValve.class)
|
||||
.addShellClass(VALVE, ValveGenerator.generateValveClass(ValveGenerator.BES_VALVE_PACKAGE, ShellTool.Godzilla))
|
||||
.addShellClass(AGENT_FILTER_CHAIN, GodzillaFilterChainAdvisor.class)
|
||||
.addShellClass(CATALINA_AGENT_CONTEXT_VALVE, GodzillaFilterChainAdvisor.class)
|
||||
.build());
|
||||
@@ -58,7 +54,7 @@ public class BesShell extends AbstractShell {
|
||||
addToolMapping(ShellTool.Behinder, ToolMapping.builder()
|
||||
.addShellClass(FILTER, BehinderFilter.class)
|
||||
.addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Behinder))
|
||||
.addShellClass(VALVE, BehinderValve.class)
|
||||
.addShellClass(VALVE, ValveGenerator.generateValveClass(ValveGenerator.BES_VALVE_PACKAGE, ShellTool.Behinder))
|
||||
.addShellClass(AGENT_FILTER_CHAIN, BehinderFilterChainAdvisor.class)
|
||||
.addShellClass(CATALINA_AGENT_CONTEXT_VALVE, BehinderFilterChainAdvisor.class)
|
||||
.build());
|
||||
@@ -66,7 +62,7 @@ public class BesShell extends AbstractShell {
|
||||
addToolMapping(ShellTool.Suo5, ToolMapping.builder()
|
||||
.addShellClass(FILTER, Suo5Filter.class)
|
||||
.addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Suo5))
|
||||
.addShellClass(VALVE, Suo5Valve.class)
|
||||
.addShellClass(VALVE, ValveGenerator.generateValveClass(ValveGenerator.BES_VALVE_PACKAGE, ShellTool.Suo5))
|
||||
.addShellClass(AGENT_FILTER_CHAIN, BehinderFilterChainAdvisor.class)
|
||||
.addShellClass(CATALINA_AGENT_CONTEXT_VALVE, BehinderFilterChainAdvisor.class)
|
||||
.build());
|
||||
@@ -74,7 +70,7 @@ public class BesShell extends AbstractShell {
|
||||
addToolMapping(ShellTool.AntSword, ToolMapping.builder()
|
||||
.addShellClass(FILTER, AntSwordFilter.class)
|
||||
.addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.AntSword))
|
||||
.addShellClass(VALVE, AntSwordValve.class)
|
||||
.addShellClass(VALVE, ValveGenerator.generateValveClass(ValveGenerator.BES_VALVE_PACKAGE, ShellTool.AntSword))
|
||||
.addShellClass(AGENT_FILTER_CHAIN, AntSwordFilterChainAdvisor.class)
|
||||
.addShellClass(CATALINA_AGENT_CONTEXT_VALVE, AntSwordFilterChainAdvisor.class)
|
||||
.build());
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.reajason.javaweb.memshell.server;
|
||||
|
||||
import com.reajason.javaweb.memshell.ShellTool;
|
||||
import com.reajason.javaweb.memshell.ShellType;
|
||||
import com.reajason.javaweb.memshell.generator.ListenerGenerator;
|
||||
import com.reajason.javaweb.memshell.glassfish.injector.GlassFishFilterInjector;
|
||||
import com.reajason.javaweb.memshell.glassfish.injector.GlassFishListenerInjector;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.reajason.javaweb.memshell.server;
|
||||
|
||||
import com.reajason.javaweb.memshell.ShellTool;
|
||||
import com.reajason.javaweb.memshell.ShellType;
|
||||
import com.reajason.javaweb.memshell.generator.ListenerGenerator;
|
||||
import com.reajason.javaweb.memshell.glassfish.injector.GlassFishListenerInjector;
|
||||
import com.reajason.javaweb.memshell.glassfish.injector.GlassFishValveInjector;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.reajason.javaweb.memshell.server;
|
||||
|
||||
import com.reajason.javaweb.memshell.ShellTool;
|
||||
import com.reajason.javaweb.memshell.ShellType;
|
||||
import com.reajason.javaweb.memshell.generator.ListenerGenerator;
|
||||
import com.reajason.javaweb.memshell.jboss.injector.JbossFilterInjector;
|
||||
import com.reajason.javaweb.memshell.jboss.injector.JbossListenerInjector;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.reajason.javaweb.memshell.server;
|
||||
|
||||
import com.reajason.javaweb.memshell.ShellTool;
|
||||
import com.reajason.javaweb.memshell.ShellType;
|
||||
import com.reajason.javaweb.memshell.generator.ListenerGenerator;
|
||||
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter;
|
||||
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.reajason.javaweb.memshell.server;
|
||||
|
||||
import com.reajason.javaweb.memshell.ShellTool;
|
||||
import com.reajason.javaweb.memshell.ShellType;
|
||||
import com.reajason.javaweb.memshell.generator.ListenerGenerator;
|
||||
import com.reajason.javaweb.memshell.generator.ValveGenerator;
|
||||
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter;
|
||||
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor;
|
||||
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter;
|
||||
@@ -12,12 +12,7 @@ import com.reajason.javaweb.memshell.shelltool.command.CommandFilterChainAdvisor
|
||||
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter;
|
||||
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor;
|
||||
import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter;
|
||||
import com.reajason.javaweb.memshell.tongweb.antsword.AntSwordValve6;
|
||||
import com.reajason.javaweb.memshell.tongweb.behinder.BehinderValve6;
|
||||
import com.reajason.javaweb.memshell.tongweb.command.CommandValve6;
|
||||
import com.reajason.javaweb.memshell.tongweb.godzilla.GodzillaValve6;
|
||||
import com.reajason.javaweb.memshell.tongweb.injector.*;
|
||||
import com.reajason.javaweb.memshell.tongweb.suo5.Suo5Valve6;
|
||||
|
||||
import static com.reajason.javaweb.memshell.ShellType.*;
|
||||
|
||||
@@ -45,56 +40,61 @@ public class TongWeb6Shell extends AbstractShell {
|
||||
protected void init() {
|
||||
|
||||
Class<?> commandListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Command);
|
||||
Class<?> commandValveClass = ValveGenerator.generateValveClass(ValveGenerator.TONGWEB6_VALVE_PACKAGE, ShellTool.Command);
|
||||
addToolMapping(ShellTool.Command, ToolMapping.builder()
|
||||
.addShellClass(FILTER, CommandFilter.class)
|
||||
.addShellClass(JAKARTA_FILTER, CommandFilter.class)
|
||||
.addShellClass(LISTENER, commandListenerClass)
|
||||
.addShellClass(JAKARTA_LISTENER, commandListenerClass)
|
||||
.addShellClass(VALVE, CommandValve6.class)
|
||||
.addShellClass(JAKARTA_VALVE, CommandValve6.class)
|
||||
.addShellClass(VALVE, commandValveClass)
|
||||
.addShellClass(JAKARTA_VALVE, commandValveClass)
|
||||
.addShellClass(AGENT_FILTER_CHAIN, CommandFilterChainAdvisor.class)
|
||||
.addShellClass(CATALINA_AGENT_CONTEXT_VALVE, CommandFilterChainAdvisor.class)
|
||||
.build());
|
||||
|
||||
Class<?> godzillaListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Godzilla);
|
||||
Class<?> godzillaValveClass = ValveGenerator.generateValveClass(ValveGenerator.TONGWEB6_VALVE_PACKAGE, ShellTool.Godzilla);
|
||||
addToolMapping(ShellTool.Godzilla, ToolMapping.builder()
|
||||
.addShellClass(FILTER, GodzillaFilter.class)
|
||||
.addShellClass(JAKARTA_FILTER, GodzillaFilter.class)
|
||||
.addShellClass(LISTENER, godzillaListenerClass)
|
||||
.addShellClass(JAKARTA_LISTENER, godzillaListenerClass)
|
||||
.addShellClass(VALVE, GodzillaValve6.class)
|
||||
.addShellClass(JAKARTA_VALVE, GodzillaValve6.class)
|
||||
.addShellClass(VALVE, godzillaValveClass)
|
||||
.addShellClass(JAKARTA_VALVE, godzillaValveClass)
|
||||
.addShellClass(AGENT_FILTER_CHAIN, GodzillaFilterChainAdvisor.class)
|
||||
.addShellClass(CATALINA_AGENT_CONTEXT_VALVE, GodzillaFilterChainAdvisor.class)
|
||||
.build());
|
||||
|
||||
Class<?> behinderListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Behinder);
|
||||
Class<?> behinderValveClass = ValveGenerator.generateValveClass(ValveGenerator.TONGWEB6_VALVE_PACKAGE, ShellTool.Behinder);
|
||||
addToolMapping(ShellTool.Behinder, ToolMapping.builder()
|
||||
.addShellClass(FILTER, BehinderFilter.class)
|
||||
.addShellClass(JAKARTA_FILTER, BehinderFilter.class)
|
||||
.addShellClass(LISTENER, behinderListenerClass)
|
||||
.addShellClass(JAKARTA_LISTENER, behinderListenerClass)
|
||||
.addShellClass(VALVE, BehinderValve6.class)
|
||||
.addShellClass(JAKARTA_VALVE, BehinderValve6.class)
|
||||
.addShellClass(VALVE, behinderValveClass)
|
||||
.addShellClass(JAKARTA_VALVE, behinderValveClass)
|
||||
.addShellClass(AGENT_FILTER_CHAIN, BehinderFilterChainAdvisor.class)
|
||||
.addShellClass(CATALINA_AGENT_CONTEXT_VALVE, BehinderFilterChainAdvisor.class)
|
||||
.build());
|
||||
|
||||
Class<?> suo5ListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Suo5);
|
||||
Class<?> suo5ValveClass = ValveGenerator.generateValveClass(ValveGenerator.TONGWEB6_VALVE_PACKAGE, ShellTool.Suo5);
|
||||
addToolMapping(ShellTool.Suo5, ToolMapping.builder()
|
||||
.addShellClass(FILTER, Suo5Filter.class)
|
||||
.addShellClass(JAKARTA_FILTER, Suo5Filter.class)
|
||||
.addShellClass(LISTENER, suo5ListenerClass)
|
||||
.addShellClass(JAKARTA_LISTENER, suo5ListenerClass)
|
||||
.addShellClass(VALVE, Suo5Valve6.class)
|
||||
.addShellClass(JAKARTA_VALVE, Suo5Valve6.class)
|
||||
.addShellClass(VALVE, suo5ValveClass)
|
||||
.addShellClass(JAKARTA_VALVE, suo5ValveClass)
|
||||
.build());
|
||||
|
||||
Class<?> antSwordListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.AntSword);
|
||||
Class<?> antSwordValveClass = ValveGenerator.generateValveClass(ValveGenerator.TONGWEB6_VALVE_PACKAGE, ShellTool.AntSword);
|
||||
addToolMapping(ShellTool.AntSword, ToolMapping.builder()
|
||||
.addShellClass(FILTER, AntSwordFilter.class)
|
||||
.addShellClass(LISTENER, antSwordListenerClass)
|
||||
.addShellClass(VALVE, AntSwordValve6.class)
|
||||
.addShellClass(VALVE, antSwordValveClass)
|
||||
.addShellClass(AGENT_FILTER_CHAIN, AntSwordFilterChainAdvisor.class)
|
||||
.addShellClass(CATALINA_AGENT_CONTEXT_VALVE, AntSwordFilterChainAdvisor.class)
|
||||
.build());
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.reajason.javaweb.memshell.server;
|
||||
|
||||
import com.reajason.javaweb.memshell.ShellTool;
|
||||
import com.reajason.javaweb.memshell.ShellType;
|
||||
import com.reajason.javaweb.memshell.generator.ListenerGenerator;
|
||||
import com.reajason.javaweb.memshell.generator.ValveGenerator;
|
||||
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter;
|
||||
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor;
|
||||
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter;
|
||||
@@ -12,12 +12,7 @@ import com.reajason.javaweb.memshell.shelltool.command.CommandFilterChainAdvisor
|
||||
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter;
|
||||
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor;
|
||||
import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter;
|
||||
import com.reajason.javaweb.memshell.tongweb.antsword.AntSwordValve7;
|
||||
import com.reajason.javaweb.memshell.tongweb.behinder.BehinderValve7;
|
||||
import com.reajason.javaweb.memshell.tongweb.command.CommandValve7;
|
||||
import com.reajason.javaweb.memshell.tongweb.godzilla.GodzillaValve7;
|
||||
import com.reajason.javaweb.memshell.tongweb.injector.*;
|
||||
import com.reajason.javaweb.memshell.tongweb.suo5.Suo5Valve7;
|
||||
|
||||
import static com.reajason.javaweb.memshell.ShellType.*;
|
||||
|
||||
@@ -26,6 +21,7 @@ import static com.reajason.javaweb.memshell.ShellType.*;
|
||||
* @since 2024/12/27
|
||||
*/
|
||||
public class TongWeb7Shell extends AbstractShell {
|
||||
|
||||
@Override
|
||||
protected InjectorMapping getShellInjectorMapping() {
|
||||
return InjectorMapping.builder()
|
||||
@@ -44,56 +40,61 @@ public class TongWeb7Shell extends AbstractShell {
|
||||
protected void init() {
|
||||
|
||||
Class<?> commandListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Command);
|
||||
Class<?> commandValveClass = ValveGenerator.generateValveClass(ValveGenerator.TONGWEB7_VALVE_PACKAGE, ShellTool.Command);
|
||||
addToolMapping(ShellTool.Command, ToolMapping.builder()
|
||||
.addShellClass(FILTER, CommandFilter.class)
|
||||
.addShellClass(JAKARTA_FILTER, CommandFilter.class)
|
||||
.addShellClass(LISTENER, commandListenerClass)
|
||||
.addShellClass(JAKARTA_LISTENER, commandListenerClass)
|
||||
.addShellClass(VALVE, CommandValve7.class)
|
||||
.addShellClass(JAKARTA_VALVE, CommandValve7.class)
|
||||
.addShellClass(VALVE, commandValveClass)
|
||||
.addShellClass(JAKARTA_VALVE, commandValveClass)
|
||||
.addShellClass(AGENT_FILTER_CHAIN, CommandFilterChainAdvisor.class)
|
||||
.addShellClass(CATALINA_AGENT_CONTEXT_VALVE, CommandFilterChainAdvisor.class)
|
||||
.build());
|
||||
|
||||
Class<?> godzillaListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Godzilla);
|
||||
Class<?> godzillaValveClass = ValveGenerator.generateValveClass(ValveGenerator.TONGWEB7_VALVE_PACKAGE, ShellTool.Godzilla);
|
||||
addToolMapping(ShellTool.Godzilla, ToolMapping.builder()
|
||||
.addShellClass(FILTER, GodzillaFilter.class)
|
||||
.addShellClass(JAKARTA_FILTER, GodzillaFilter.class)
|
||||
.addShellClass(LISTENER, godzillaListenerClass)
|
||||
.addShellClass(JAKARTA_LISTENER, godzillaListenerClass)
|
||||
.addShellClass(VALVE, GodzillaValve7.class)
|
||||
.addShellClass(JAKARTA_VALVE, GodzillaValve7.class)
|
||||
.addShellClass(VALVE, godzillaValveClass)
|
||||
.addShellClass(JAKARTA_VALVE, godzillaValveClass)
|
||||
.addShellClass(AGENT_FILTER_CHAIN, GodzillaFilterChainAdvisor.class)
|
||||
.addShellClass(CATALINA_AGENT_CONTEXT_VALVE, GodzillaFilterChainAdvisor.class)
|
||||
.build());
|
||||
|
||||
Class<?> behinderListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Behinder);
|
||||
Class<?> behinderValveClass = ValveGenerator.generateValveClass(ValveGenerator.TONGWEB7_VALVE_PACKAGE, ShellTool.Behinder);
|
||||
addToolMapping(ShellTool.Behinder, ToolMapping.builder()
|
||||
.addShellClass(FILTER, BehinderFilter.class)
|
||||
.addShellClass(JAKARTA_FILTER, BehinderFilter.class)
|
||||
.addShellClass(LISTENER, behinderListenerClass)
|
||||
.addShellClass(JAKARTA_LISTENER, behinderListenerClass)
|
||||
.addShellClass(VALVE, BehinderValve7.class)
|
||||
.addShellClass(JAKARTA_VALVE, BehinderValve7.class)
|
||||
.addShellClass(VALVE, behinderValveClass)
|
||||
.addShellClass(JAKARTA_VALVE, behinderValveClass)
|
||||
.addShellClass(AGENT_FILTER_CHAIN, BehinderFilterChainAdvisor.class)
|
||||
.addShellClass(CATALINA_AGENT_CONTEXT_VALVE, BehinderFilterChainAdvisor.class)
|
||||
.build());
|
||||
|
||||
Class<?> suo5ListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Suo5);
|
||||
Class<?> suo5ValveClass = ValveGenerator.generateValveClass(ValveGenerator.TONGWEB7_VALVE_PACKAGE, ShellTool.Suo5);
|
||||
addToolMapping(ShellTool.Suo5, ToolMapping.builder()
|
||||
.addShellClass(FILTER, Suo5Filter.class)
|
||||
.addShellClass(JAKARTA_FILTER, Suo5Filter.class)
|
||||
.addShellClass(LISTENER, suo5ListenerClass)
|
||||
.addShellClass(JAKARTA_LISTENER, suo5ListenerClass)
|
||||
.addShellClass(VALVE, Suo5Valve7.class)
|
||||
.addShellClass(JAKARTA_VALVE, Suo5Valve7.class)
|
||||
.addShellClass(VALVE, suo5ValveClass)
|
||||
.addShellClass(JAKARTA_VALVE, suo5ValveClass)
|
||||
.build());
|
||||
|
||||
Class<?> antSwordListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.AntSword);
|
||||
Class<?> antSwordValveClass = ValveGenerator.generateValveClass(ValveGenerator.TONGWEB7_VALVE_PACKAGE, ShellTool.Command);
|
||||
addToolMapping(ShellTool.AntSword, ToolMapping.builder()
|
||||
.addShellClass(FILTER, AntSwordFilter.class)
|
||||
.addShellClass(LISTENER, antSwordListenerClass)
|
||||
.addShellClass(VALVE, AntSwordValve7.class)
|
||||
.addShellClass(VALVE, antSwordValveClass)
|
||||
.addShellClass(AGENT_FILTER_CHAIN, AntSwordFilterChainAdvisor.class)
|
||||
.addShellClass(CATALINA_AGENT_CONTEXT_VALVE, AntSwordFilterChainAdvisor.class)
|
||||
.build());
|
||||
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
package com.reajason.javaweb.memshell.generator;
|
||||
|
||||
import com.reajason.javaweb.memshell.ShellTool;
|
||||
import net.bytebuddy.jar.asm.ClassReader;
|
||||
import net.bytebuddy.jar.asm.ClassVisitor;
|
||||
import net.bytebuddy.jar.asm.Opcodes;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2025/2/22
|
||||
*/
|
||||
class ValveGeneratorTest {
|
||||
|
||||
@Test
|
||||
void test() throws Exception {
|
||||
Class<?> clazz = ValveGenerator.generateValveClass(ValveGenerator.BES_VALVE_PACKAGE, ShellTool.Command);
|
||||
InputStream resourceAsStream = clazz.getClassLoader().getResourceAsStream(clazz.getName().replace('.', '/') + ".class");
|
||||
assert resourceAsStream != null;
|
||||
ClassReader cr = new ClassReader(resourceAsStream);
|
||||
cr.accept(new ClassVisitor(Opcodes.ASM9) {
|
||||
@Override
|
||||
public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
|
||||
assertEquals("com/bes/enterprise/webtier/Valve", interfaces[0]);
|
||||
}
|
||||
}, 0);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user