diff --git a/generator/src/main/java/com/reajason/javaweb/buddy/ByPassJdkModuleInterceptor.java b/generator/src/main/java/com/reajason/javaweb/buddy/ByPassJdkModuleInterceptor.java index 1d0bf84d..dce748d0 100644 --- a/generator/src/main/java/com/reajason/javaweb/buddy/ByPassJdkModuleInterceptor.java +++ b/generator/src/main/java/com/reajason/javaweb/buddy/ByPassJdkModuleInterceptor.java @@ -37,6 +37,26 @@ public class ByPassJdkModuleInterceptor { } } + /** + * Reference1: stackoverflow + * Reference2: issue + *
+ * 向类中添加 byPassJdkModule 方法,并在创建静态变量初始化,使其能在静态代码块中执行 byPassJdkModule 方法 + * 值得注意的一点,builder 是不可变类型,所以都是需要重新赋值,例如以下代码示例 + * # code that not work + * builder = new Bytebuddy().redefine(class); + * builder.visit(something); + * builder.make(); + *
+ * # code that work + *
+ * builder = new Bytebuddy().redefine(class); + * builder = builder.visit(something); + * builder.make(); + * + * @param builder bytebuddy builder + * @return new builder with bypass + */ public static DynamicType.Builder extend(DynamicType.Builder builder) { return builder .defineField("isBypassModule", boolean.class, Visibility.PUBLIC, Ownership.STATIC) diff --git a/generator/src/test/java/com/reajason/javaweb/memsell/tomcat/godzilla/GodzillaValveTest.java b/generator/src/test/java/com/reajason/javaweb/memsell/tomcat/godzilla/GodzillaValveTest.java index 4120b514..17ff7c7b 100644 --- a/generator/src/test/java/com/reajason/javaweb/memsell/tomcat/godzilla/GodzillaValveTest.java +++ b/generator/src/test/java/com/reajason/javaweb/memsell/tomcat/godzilla/GodzillaValveTest.java @@ -7,9 +7,6 @@ import net.bytebuddy.jar.asm.Opcodes; import org.apache.commons.codec.binary.Base64; import org.junit.jupiter.api.Test; -import java.nio.file.Files; -import java.nio.file.Paths; - import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -40,7 +37,7 @@ class GodzillaValveTest { void generateJakarta() { String className = "org.apache.utils.CommonJakartaValve"; byte[] bytes = GodzillaGenerator.generate(GodzillaValve.class, className, pass, key, headerName, headerValue, true, Opcodes.V11, false); - Files.write(Paths.get(className + ".class"), bytes); +// Files.write(Paths.get(className + ".class"), bytes); Object obj = ClassUtils.newInstance(bytes); assertEquals(className, obj.getClass().getName()); assertEquals(pass, ClassUtils.getFieldValue(obj, "pass"));