mirror of
https://github.com/ReaJason/MemShellParty.git
synced 2026-09-21 22:50:42 +08:00
refactor: rename
1. 将枚举 Server 改为字符串常量,使得 memshell 和 probeshell 都能共用 2. 移除 memshell 模块直接内置在 generator 中 3. 通用类从 memshell 移动至 javaweb 下,命名修改,增加辨识度
This commit is contained in:
@@ -1,12 +1,9 @@
|
||||
package com.reajason.javaweb.boot;
|
||||
|
||||
import com.reajason.javaweb.memshell.Server;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
*/
|
||||
@@ -16,8 +13,5 @@ public class BootApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(BootApplication.class, args);
|
||||
Server[] values = Server.values();
|
||||
log.info("Supported servers: {}", Arrays.toString(values));
|
||||
log.info("For another server, you can open a issue in GitHub, https://github.com/ReaJason/MemShellParty/issues/new?template=%E8%AF%B7%E6%B1%82%E9%80%82%E9%85%8D.md");
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
package com.reajason.javaweb.boot.controller;
|
||||
|
||||
import com.reajason.javaweb.boot.vo.CommandConfigVO;
|
||||
import com.reajason.javaweb.memshell.Server;
|
||||
import com.reajason.javaweb.memshell.ServerFactory;
|
||||
import com.reajason.javaweb.memshell.ShellTool;
|
||||
import com.reajason.javaweb.memshell.config.CommandConfig;
|
||||
import com.reajason.javaweb.memshell.server.AbstractShell;
|
||||
import com.reajason.javaweb.memshell.server.AbstractServer;
|
||||
import com.reajason.javaweb.packer.Packers;
|
||||
import org.springframework.web.bind.annotation.CrossOrigin;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
@@ -25,11 +25,10 @@ public class ConfigController {
|
||||
@RequestMapping("/servers")
|
||||
public Map<String, List<String>> getServers() {
|
||||
Map<String, List<String>> servers = new LinkedHashMap<>();
|
||||
for (Server server : Server.values()) {
|
||||
if (server.getShell() != null) {
|
||||
Set<String> supportedShellTypes = server.getShell().getShellInjectorMapping().getSupportedShellTypes();
|
||||
servers.put(server.name(), supportedShellTypes.stream().toList());
|
||||
}
|
||||
List<String> supportedServers = ServerFactory.getSupportedServers();
|
||||
for (String supportedServer : supportedServers) {
|
||||
Set<String> supportedShellTypes = ServerFactory.getServer(supportedServer).getShellInjectorMapping().getSupportedShellTypes();
|
||||
servers.put(supportedServer, supportedShellTypes.stream().toList());
|
||||
}
|
||||
return servers;
|
||||
}
|
||||
@@ -44,20 +43,21 @@ public class ConfigController {
|
||||
@RequestMapping
|
||||
public Map<String, Map<?, ?>> config() {
|
||||
Map<String, Map<?, ?>> coreMap = new HashMap<>(16);
|
||||
for (Server value : Server.values()) {
|
||||
AbstractShell shell = value.getShell();
|
||||
if (shell == null) {
|
||||
List<String> supportedServers = ServerFactory.getSupportedServers();
|
||||
for (String supportedServer : supportedServers) {
|
||||
AbstractServer server = ServerFactory.getServer(supportedServer);
|
||||
if (server == null) {
|
||||
continue;
|
||||
}
|
||||
Map<String, Set<String>> map = new LinkedHashMap<>(16);
|
||||
for (ShellTool shellTool : shell.getSupportedShellTools()) {
|
||||
Set<String> supportedShellTypes = shell.getSupportedShellTypes(shellTool);
|
||||
for (ShellTool shellTool : server.getSupportedShellTools()) {
|
||||
Set<String> supportedShellTypes = server.getSupportedShellTypes(shellTool);
|
||||
if (supportedShellTypes.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
map.put(shellTool.name(), supportedShellTypes);
|
||||
}
|
||||
coreMap.put(value.name(), map);
|
||||
coreMap.put(supportedServer, map);
|
||||
}
|
||||
return coreMap;
|
||||
}
|
||||
|
||||
+8
-8
@@ -1,7 +1,7 @@
|
||||
package com.reajason.javaweb.boot.controller;
|
||||
|
||||
import com.reajason.javaweb.boot.dto.GenerateRequest;
|
||||
import com.reajason.javaweb.boot.dto.GenerateResponse;
|
||||
import com.reajason.javaweb.boot.dto.MemShellGenerateRequest;
|
||||
import com.reajason.javaweb.boot.dto.MemShellGenerateResponse;
|
||||
import com.reajason.javaweb.memshell.MemShellGenerator;
|
||||
import com.reajason.javaweb.memshell.MemShellResult;
|
||||
import com.reajason.javaweb.memshell.config.InjectorConfig;
|
||||
@@ -19,22 +19,22 @@ import java.util.Base64;
|
||||
* @since 2024/12/18
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/generate")
|
||||
@RequestMapping("/memshell/generate")
|
||||
@CrossOrigin("*")
|
||||
public class GeneratorController {
|
||||
public class MemShellGeneratorController {
|
||||
@PostMapping
|
||||
public GenerateResponse generate(@RequestBody GenerateRequest request) {
|
||||
public MemShellGenerateResponse generate(@RequestBody MemShellGenerateRequest request) {
|
||||
ShellConfig shellConfig = request.getShellConfig();
|
||||
ShellToolConfig shellToolConfig = request.parseShellToolConfig();
|
||||
InjectorConfig injectorConfig = request.getInjectorConfig();
|
||||
MemShellResult generateResult = MemShellGenerator.generate(shellConfig, injectorConfig, shellToolConfig);
|
||||
Packer packer = request.getPacker().getInstance();
|
||||
if (packer instanceof JarPacker) {
|
||||
return new GenerateResponse(generateResult, Base64.getEncoder().encodeToString(((JarPacker) packer).packBytes(generateResult.toJarPackerConfig())));
|
||||
return new MemShellGenerateResponse(generateResult, Base64.getEncoder().encodeToString(((JarPacker) packer).packBytes(generateResult.toJarPackerConfig())));
|
||||
} else if (packer instanceof AggregatePacker) {
|
||||
return new GenerateResponse(generateResult, ((AggregatePacker) packer).packAll(generateResult.toClassPackerConfig()));
|
||||
return new MemShellGenerateResponse(generateResult, ((AggregatePacker) packer).packAll(generateResult.toClassPackerConfig()));
|
||||
} else {
|
||||
return new GenerateResponse(generateResult, packer.pack(generateResult.toClassPackerConfig()));
|
||||
return new MemShellGenerateResponse(generateResult, packer.pack(generateResult.toClassPackerConfig()));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
package com.reajason.javaweb.boot.controller;
|
||||
|
||||
import com.reajason.javaweb.boot.dto.ProbeGenerateRequest;
|
||||
import com.reajason.javaweb.boot.dto.ProbeGenerateResponse;
|
||||
import com.reajason.javaweb.packer.AggregatePacker;
|
||||
import com.reajason.javaweb.packer.Packer;
|
||||
import com.reajason.javaweb.probe.ProbeGenerator;
|
||||
import com.reajason.javaweb.probe.ProbeResult;
|
||||
import com.reajason.javaweb.probe.config.ProbeConfig;
|
||||
import com.reajason.javaweb.probe.config.ProbeContentConfig;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2025/8/10
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/probe/generate")
|
||||
@CrossOrigin("*")
|
||||
public class ProbeGeneratorController {
|
||||
@PostMapping
|
||||
public ProbeGenerateResponse generate(@RequestBody ProbeGenerateRequest request) {
|
||||
ProbeConfig probeConfig = request.getProbeConfig();
|
||||
ProbeContentConfig probeContentConfig = request.parseProbeContentConfig();
|
||||
ProbeResult generateResult = ProbeGenerator.generate(probeConfig, probeContentConfig);
|
||||
Packer packer = request.getPacker().getInstance();
|
||||
if (packer instanceof AggregatePacker) {
|
||||
return new ProbeGenerateResponse(generateResult, ((AggregatePacker) packer).packAll(generateResult.toClassPackerConfig()));
|
||||
} else {
|
||||
return new ProbeGenerateResponse(generateResult, packer.pack(generateResult.toClassPackerConfig()));
|
||||
}
|
||||
}
|
||||
}
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
package com.reajason.javaweb.boot.controller;
|
||||
|
||||
import com.reajason.javaweb.boot.dto.ProbeShellGenerateRequest;
|
||||
import com.reajason.javaweb.boot.dto.ProbeShellGenerateResponse;
|
||||
import com.reajason.javaweb.packer.AggregatePacker;
|
||||
import com.reajason.javaweb.packer.Packer;
|
||||
import com.reajason.javaweb.probe.ProbeShellGenerator;
|
||||
import com.reajason.javaweb.probe.ProbeShellResult;
|
||||
import com.reajason.javaweb.probe.config.ProbeConfig;
|
||||
import com.reajason.javaweb.probe.config.ProbeContentConfig;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2025/8/10
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/probe/generate")
|
||||
@CrossOrigin("*")
|
||||
public class ProbeShellGeneratorController {
|
||||
@PostMapping
|
||||
public ProbeShellGenerateResponse generate(@RequestBody ProbeShellGenerateRequest request) {
|
||||
ProbeConfig probeConfig = request.getProbeConfig();
|
||||
ProbeContentConfig probeContentConfig = request.parseProbeContentConfig();
|
||||
ProbeShellResult generateResult = ProbeShellGenerator.generate(probeConfig, probeContentConfig);
|
||||
Packer packer = request.getPacker().getInstance();
|
||||
if (packer instanceof AggregatePacker) {
|
||||
return new ProbeShellGenerateResponse(generateResult, ((AggregatePacker) packer).packAll(generateResult.toClassPackerConfig()));
|
||||
} else {
|
||||
return new ProbeShellGenerateResponse(generateResult, packer.pack(generateResult.toClassPackerConfig()));
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
package com.reajason.javaweb.boot.dto;
|
||||
|
||||
import com.reajason.javaweb.memshell.config.*;
|
||||
import com.reajason.javaweb.memshell.utils.CommonUtil;
|
||||
import com.reajason.javaweb.packer.Packers;
|
||||
import com.reajason.javaweb.utils.CommonUtil;
|
||||
import lombok.Data;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
@@ -11,7 +11,7 @@ import org.apache.commons.lang3.StringUtils;
|
||||
* @since 2024/12/18
|
||||
*/
|
||||
@Data
|
||||
public class GenerateRequest {
|
||||
public class MemShellGenerateRequest {
|
||||
private ShellConfig shellConfig;
|
||||
private ShellToolConfigDTO shellToolConfig;
|
||||
private InjectorConfig injectorConfig;
|
||||
+6
-6
@@ -12,18 +12,18 @@ import java.util.Map;
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
public class GenerateResponse {
|
||||
private MemShellResult generateResult;
|
||||
public class MemShellGenerateResponse {
|
||||
private MemShellResult memShellResult;
|
||||
private String packResult;
|
||||
private Map<String, String> allPackResults;
|
||||
|
||||
public GenerateResponse(MemShellResult generateResult, String packResult) {
|
||||
this.generateResult = generateResult;
|
||||
public MemShellGenerateResponse(MemShellResult memShellResult, String packResult) {
|
||||
this.memShellResult = memShellResult;
|
||||
this.packResult = packResult;
|
||||
}
|
||||
|
||||
public GenerateResponse(MemShellResult generateResult, Map<String, String> allPackResults) {
|
||||
public MemShellGenerateResponse(MemShellResult memShellResult, Map<String, String> allPackResults) {
|
||||
this.allPackResults = allPackResults;
|
||||
this.generateResult = generateResult;
|
||||
this.memShellResult = memShellResult;
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
package com.reajason.javaweb.boot.dto;
|
||||
|
||||
import com.reajason.javaweb.probe.ProbeResult;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2025/8/10
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
public class ProbeGenerateResponse {
|
||||
private ProbeResult probeResult;
|
||||
private String packResult;
|
||||
private Map<String, String> allPackResults;
|
||||
|
||||
public ProbeGenerateResponse(ProbeResult probeResult, String packResult) {
|
||||
this.probeResult = probeResult;
|
||||
this.packResult = packResult;
|
||||
}
|
||||
|
||||
public ProbeGenerateResponse(ProbeResult probeResult, Map<String, String> allPackResults) {
|
||||
this.allPackResults = allPackResults;
|
||||
this.probeResult = probeResult;
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -9,7 +9,7 @@ import lombok.Data;
|
||||
* @since 2025/8/10
|
||||
*/
|
||||
@Data
|
||||
public class ProbeGenerateRequest {
|
||||
public class ProbeShellGenerateRequest {
|
||||
private ProbeConfig probeConfig;
|
||||
private ProbeContentConfigDTO probeContentConfig;
|
||||
private Packers packer;
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.reajason.javaweb.boot.dto;
|
||||
|
||||
import com.reajason.javaweb.probe.ProbeShellResult;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2025/8/10
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
public class ProbeShellGenerateResponse {
|
||||
private ProbeShellResult probeShellResult;
|
||||
private String packResult;
|
||||
private Map<String, String> allPackResults;
|
||||
|
||||
public ProbeShellGenerateResponse(ProbeShellResult probeShellResult, String packResult) {
|
||||
this.probeShellResult = probeShellResult;
|
||||
this.packResult = packResult;
|
||||
}
|
||||
|
||||
public ProbeShellGenerateResponse(ProbeShellResult probeShellResult, Map<String, String> allPackResults) {
|
||||
this.allPackResults = allPackResults;
|
||||
this.probeShellResult = probeShellResult;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,14 @@
|
||||
plugins {
|
||||
id("java")
|
||||
id("idea")
|
||||
}
|
||||
|
||||
idea {
|
||||
module {
|
||||
excludeDirs.add(file("src"))
|
||||
}
|
||||
}
|
||||
|
||||
version = "2.0.0-SNAPSHOT"
|
||||
|
||||
tasks.register("publishAllToMavenCentral") {
|
||||
|
||||
@@ -29,17 +29,19 @@ tasks.test {
|
||||
dependencies {
|
||||
implementation(project(":memshell-party-common"))
|
||||
implementation(project(":packer"))
|
||||
implementation(project(":memshell"))
|
||||
implementation(libs.bundles.jna)
|
||||
implementation(libs.javax.servlet.api)
|
||||
implementation(libs.byte.buddy)
|
||||
implementation(libs.asm.commons)
|
||||
implementation(libs.javax.websocket.api)
|
||||
implementation(libs.javax.servlet.api)
|
||||
implementation(libs.spring.webmvc)
|
||||
implementation(libs.spring.webflux)
|
||||
implementation(libs.reactor.netty.core)
|
||||
|
||||
implementation(libs.bundles.jna)
|
||||
implementation(libs.bcel)
|
||||
implementation(libs.okhttp3)
|
||||
implementation(libs.logback.classic)
|
||||
implementation(libs.jackson.databind)
|
||||
implementation(libs.spring.webmvc)
|
||||
implementation(libs.spring.webflux)
|
||||
implementation(libs.reactor.netty.core)
|
||||
testImplementation(libs.junit.jupiter)
|
||||
testRuntimeOnly(libs.junit.platform.launcher)
|
||||
testImplementation(libs.bundles.mockito)
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
package com.reajason.javaweb;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2025/8/5
|
||||
*/
|
||||
public class Constants {
|
||||
public static class Server {
|
||||
public static final String TOMCAT = "Tomcat";
|
||||
public static final String JETTY = "Jetty";
|
||||
public static final String UNDERTOW = "Undertow";
|
||||
public static final String JBOSS = "JBoss";
|
||||
public static final String RESIN = "Resin";
|
||||
public static final String WEBLOGIC = "WebLogic";
|
||||
public static final String WEBSPHERE = "WebSphere";
|
||||
public static final String GLASSFISH = "GlassFish";
|
||||
public static final String TONGWEB = "TongWeb";
|
||||
public static final String BES = "BES";
|
||||
public static final String INFORSUITE = "InforSuite";
|
||||
public static final String APUSIC = "Apusic";
|
||||
public static final String SPRING_WEBFLUX = "SpringWebFlux";
|
||||
public static final String SPRING_WEBMVC = "SpringWebMvc";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.reajason.javaweb;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2025/8/11
|
||||
*/
|
||||
public class Server {
|
||||
public static final String Tomcat = "Tomcat";
|
||||
public static final String Jetty = "Jetty";
|
||||
public static final String Undertow = "Undertow";
|
||||
public static final String JBoss = "JBoss";
|
||||
public static final String Resin = "Resin";
|
||||
public static final String WebLogic = "WebLogic";
|
||||
public static final String WebSphere = "WebSphere";
|
||||
public static final String GlassFish = "GlassFish";
|
||||
public static final String TongWeb = "TongWeb";
|
||||
public static final String BES = "BES";
|
||||
public static final String InforSuite = "InforSuite";
|
||||
public static final String Apusic = "Apusic";
|
||||
public static final String SpringWebMvc = "SpringWebMvc";
|
||||
public static final String SpringWebFlux = "SpringWebFlux";
|
||||
public static final String XXLJOB = "XXLJOB";
|
||||
}
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.reajason.javaweb.memshell.generator;
|
||||
package com.reajason.javaweb;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
@@ -4,8 +4,8 @@ import com.reajason.javaweb.memshell.config.InjectorConfig;
|
||||
import com.reajason.javaweb.memshell.config.ShellConfig;
|
||||
import com.reajason.javaweb.memshell.config.ShellToolConfig;
|
||||
import com.reajason.javaweb.memshell.generator.InjectorGenerator;
|
||||
import com.reajason.javaweb.memshell.server.AbstractShell;
|
||||
import com.reajason.javaweb.memshell.utils.CommonUtil;
|
||||
import com.reajason.javaweb.memshell.server.AbstractServer;
|
||||
import com.reajason.javaweb.utils.CommonUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
@@ -18,14 +18,14 @@ import java.util.Map;
|
||||
public class MemShellGenerator {
|
||||
|
||||
public static MemShellResult generate(ShellConfig shellConfig, InjectorConfig injectorConfig, ShellToolConfig shellToolConfig) {
|
||||
Server server = shellConfig.getServer();
|
||||
AbstractShell shell = server.getShell();
|
||||
if (shell == null) {
|
||||
throw new IllegalArgumentException("Unsupported server: " + server);
|
||||
String serverName = shellConfig.getServer();
|
||||
AbstractServer server = ServerFactory.getServer(serverName);
|
||||
if (server == null) {
|
||||
throw new IllegalArgumentException("Unsupported server: " + serverName);
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(shellToolConfig.getShellClassName())) {
|
||||
shellToolConfig.setShellClassName(CommonUtil.generateShellClassName(server, shellConfig.getShellType()));
|
||||
shellToolConfig.setShellClassName(CommonUtil.generateShellClassName(serverName, shellConfig.getShellType()));
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(injectorConfig.getInjectorClassName())) {
|
||||
@@ -35,11 +35,11 @@ public class MemShellGenerator {
|
||||
Class<?> injectorClass = null;
|
||||
|
||||
if (ShellTool.Custom.equals(shellConfig.getShellTool())) {
|
||||
injectorClass = shellConfig.getServer().getShell().getShellInjectorMapping().getInjector(shellConfig.getShellType());
|
||||
injectorClass = server.getShellInjectorMapping().getInjector(shellConfig.getShellType());
|
||||
} else {
|
||||
Pair<Class<?>, Class<?>> shellInjectorPair = shellConfig.getServer().getShell().getShellInjectorPair(shellConfig.getShellTool(), shellConfig.getShellType());
|
||||
Pair<Class<?>, Class<?>> shellInjectorPair = server.getShellInjectorPair(shellConfig.getShellTool(), shellConfig.getShellType());
|
||||
if (shellInjectorPair == null) {
|
||||
throw new UnsupportedOperationException(server + " unsupported shell type: " + shellConfig.getShellType() + " for tool: " + shellConfig.getShellTool());
|
||||
throw new UnsupportedOperationException(serverName + " unsupported shell type: " + shellConfig.getShellType() + " for tool: " + shellConfig.getShellTool());
|
||||
}
|
||||
Class<?> shellClass = shellInjectorPair.getLeft();
|
||||
injectorClass = shellInjectorPair.getRight();
|
||||
|
||||
+78
-89
@@ -1,5 +1,6 @@
|
||||
package com.reajason.javaweb.memshell;
|
||||
|
||||
import com.reajason.javaweb.Server;
|
||||
import com.reajason.javaweb.memshell.server.*;
|
||||
import com.reajason.javaweb.memshell.shelltool.antsword.*;
|
||||
import com.reajason.javaweb.memshell.shelltool.behinder.*;
|
||||
@@ -7,102 +8,43 @@ import com.reajason.javaweb.memshell.shelltool.command.*;
|
||||
import com.reajason.javaweb.memshell.shelltool.godzilla.*;
|
||||
import com.reajason.javaweb.memshell.shelltool.neoreg.*;
|
||||
import com.reajason.javaweb.memshell.shelltool.suo5.*;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import static com.reajason.javaweb.memshell.ShellType.*;
|
||||
import static com.reajason.javaweb.memshell.server.ServerToolRegistry.addToolMapping;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2024/11/22
|
||||
* @since 2025/8/11
|
||||
*/
|
||||
@Getter
|
||||
public enum Server {
|
||||
/**
|
||||
* Tomcat 中间件
|
||||
*/
|
||||
Tomcat(new TomcatShell()),
|
||||
/**
|
||||
* Jetty 中间件
|
||||
*/
|
||||
Jetty(new JettyShell()),
|
||||
/**
|
||||
* JBoss 中间件,JBoss 6.4-EAP 也使用的当前方式 <a href="https://jbossas.jboss.org/downloads">JBoss AS</a>
|
||||
*/
|
||||
JBoss(new JbossShell()),
|
||||
/**
|
||||
* Undertow,对应是 Wildfly 以及 JBossEAP7,也有可能是 SpringBoot 用的
|
||||
* <a href="https://developers.redhat.com/products/eap/download">JBossEAP</a>
|
||||
*/
|
||||
Undertow(new UndertowShell()),
|
||||
|
||||
/**
|
||||
* SpringMVC 框架
|
||||
*/
|
||||
SpringWebMvc(new SpringWebMvcShell()),
|
||||
|
||||
/**
|
||||
* Spring WebFlux 框架
|
||||
*/
|
||||
SpringWebFlux(new SpringWebFluxShell()),
|
||||
|
||||
/**
|
||||
* WebSphere 中间件
|
||||
*/
|
||||
WebSphere(new WebSphereShell()),
|
||||
|
||||
/**
|
||||
* WebLogic 中间件
|
||||
*/
|
||||
WebLogic(new WebLogicShell()),
|
||||
|
||||
/**
|
||||
* Resin 中间件,<a href="https://caucho.com/products/resin/download">Resin</a>
|
||||
*/
|
||||
Resin(new ResinShell()),
|
||||
|
||||
/**
|
||||
* GlassFish 中间件
|
||||
*/
|
||||
GlassFish(new GlassFishShell()),
|
||||
|
||||
/**
|
||||
* 宝兰德中间件,9.5.2+ 企业版
|
||||
*/
|
||||
BES(new BesShell()),
|
||||
|
||||
/**
|
||||
* 东方通中间件
|
||||
*/
|
||||
TongWeb(new TongWebShell()),
|
||||
|
||||
/**
|
||||
* 金蝶天燕中间件,only 9
|
||||
*/
|
||||
Apusic(new ApusicShell()),
|
||||
|
||||
/**
|
||||
* 中创中间件
|
||||
*/
|
||||
InforSuite(new InforSuiteShell()),
|
||||
|
||||
/**
|
||||
* 普元中间件
|
||||
*/
|
||||
Primeton(new GlassFishShell()),
|
||||
|
||||
/**
|
||||
* XXL-JOB
|
||||
*/
|
||||
XXLJOB(new XxlJobShell());
|
||||
|
||||
private final AbstractShell shell;
|
||||
|
||||
Server(AbstractShell shell) {
|
||||
this.shell = shell;
|
||||
}
|
||||
public class ServerFactory {
|
||||
private static final Map<String, Supplier<AbstractServer>> registry = new ConcurrentHashMap<>();
|
||||
private static final Map<String, AbstractServer> instances = new ConcurrentHashMap<>();
|
||||
private static final List<String> servers = new CopyOnWriteArrayList<>();
|
||||
|
||||
static {
|
||||
register(Server.Tomcat, Tomcat::new);
|
||||
register(Server.Jetty, Jetty::new);
|
||||
register(Server.Undertow, Undertow::new);
|
||||
register(Server.JBoss, Jboss::new);
|
||||
register(Server.Resin, Resin::new);
|
||||
register(Server.WebLogic, WebLogic::new);
|
||||
register(Server.WebSphere, WebSphere::new);
|
||||
register(Server.GlassFish, GlassFish::new);
|
||||
register(Server.TongWeb, TongWeb::new);
|
||||
register(Server.BES, Bes::new);
|
||||
register(Server.InforSuite, InforSuite::new);
|
||||
register(Server.Apusic, Apusic::new);
|
||||
register(Server.SpringWebMvc, SpringWebMvc::new);
|
||||
register(Server.SpringWebFlux, SpringWebFlux::new);
|
||||
register(Server.XXLJOB, XxlJob::new);
|
||||
|
||||
addToolMapping(ShellTool.Godzilla, ToolMapping.builder()
|
||||
.addShellClass(SERVLET, GodzillaServlet.class)
|
||||
.addShellClass(JAKARTA_SERVLET, GodzillaServlet.class)
|
||||
@@ -253,4 +195,51 @@ public enum Server {
|
||||
.addShellClass(WAS_AGENT_FILTER_MANAGER, NeoreGeorg.class)
|
||||
.build());
|
||||
}
|
||||
}
|
||||
|
||||
public static void register(String serverName, Supplier<AbstractServer> shellSupplier) {
|
||||
if (serverName == null || serverName.trim().isEmpty()) {
|
||||
throw new IllegalArgumentException("Server name cannot be null or empty.");
|
||||
}
|
||||
Supplier<AbstractServer> existing = registry.putIfAbsent(serverName, shellSupplier);
|
||||
if (existing == null) {
|
||||
servers.add(serverName);
|
||||
}
|
||||
}
|
||||
|
||||
public static AbstractServer getServer(String serverName) {
|
||||
if (serverName == null) {
|
||||
return null;
|
||||
}
|
||||
return instances.computeIfAbsent(serverName, k -> {
|
||||
Supplier<AbstractServer> supplier = registry.get(k);
|
||||
if (supplier == null) {
|
||||
throw new IllegalArgumentException("Unsupported server type: '" + serverName + "'.");
|
||||
}
|
||||
return supplier.get();
|
||||
});
|
||||
}
|
||||
|
||||
public static void addToolMapping(ShellTool shellTool, ToolMapping toolMapping) {
|
||||
Map<String, Class<?>> rawToolMapping = toolMapping.getShellClassMap();
|
||||
List<String> supportedServers = ServerFactory.getSupportedServers();
|
||||
for (String supportedServer : supportedServers) {
|
||||
AbstractServer server = ServerFactory.getServer(supportedServer);
|
||||
InjectorMapping shellInjectorMapping = server.getShellInjectorMapping();
|
||||
Set<String> injectorSupportedShellTypes = shellInjectorMapping.getSupportedShellTypes();
|
||||
ToolMapping.ToolMappingBuilder toolMappingBuilder = ToolMapping.builder();
|
||||
|
||||
for (String shellType : injectorSupportedShellTypes) {
|
||||
Class<?> shellClass = rawToolMapping.get(shellType);
|
||||
if (shellClass == null) {
|
||||
continue;
|
||||
}
|
||||
toolMappingBuilder.addShellClass(shellType, shellClass);
|
||||
}
|
||||
server.addToolMapping(shellTool, toolMappingBuilder.build());
|
||||
}
|
||||
}
|
||||
|
||||
public static List<String> getSupportedServers() {
|
||||
return Collections.unmodifiableList(servers);
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.reajason.javaweb.memshell;
|
||||
|
||||
import com.reajason.javaweb.ShellGenerator;
|
||||
import com.reajason.javaweb.memshell.config.*;
|
||||
import com.reajason.javaweb.memshell.generator.*;
|
||||
import com.reajason.javaweb.memshell.generator.command.CommandGenerator;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.reajason.javaweb.memshell.config;
|
||||
|
||||
import com.reajason.javaweb.memshell.utils.CommonUtil;
|
||||
import com.reajason.javaweb.utils.CommonUtil;
|
||||
import lombok.*;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.reajason.javaweb.memshell.config;
|
||||
|
||||
import com.reajason.javaweb.memshell.utils.CommonUtil;
|
||||
import com.reajason.javaweb.utils.CommonUtil;
|
||||
import lombok.*;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.reajason.javaweb.memshell.config;
|
||||
|
||||
import com.reajason.javaweb.memshell.utils.CommonUtil;
|
||||
import com.reajason.javaweb.utils.CommonUtil;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.ToString;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.reajason.javaweb.memshell.config;
|
||||
|
||||
import com.reajason.javaweb.memshell.utils.CommonUtil;
|
||||
import com.reajason.javaweb.utils.CommonUtil;
|
||||
import lombok.*;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.reajason.javaweb.memshell.config;
|
||||
|
||||
import com.reajason.javaweb.memshell.utils.CommonUtil;
|
||||
import com.reajason.javaweb.utils.CommonUtil;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.reajason.javaweb.memshell.config;
|
||||
|
||||
import com.reajason.javaweb.memshell.utils.CommonUtil;
|
||||
import com.reajason.javaweb.utils.CommonUtil;
|
||||
import lombok.*;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.reajason.javaweb.memshell.config;
|
||||
|
||||
import com.reajason.javaweb.memshell.Server;
|
||||
import com.reajason.javaweb.memshell.ShellTool;
|
||||
import com.reajason.javaweb.memshell.ShellType;
|
||||
import lombok.AllArgsConstructor;
|
||||
@@ -21,7 +20,7 @@ public class ShellConfig {
|
||||
/**
|
||||
* 目标服务类型
|
||||
*/
|
||||
private Server server;
|
||||
private String server;
|
||||
|
||||
/**
|
||||
* 目标服务版本
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.reajason.javaweb.memshell.config;
|
||||
|
||||
import com.reajason.javaweb.memshell.utils.CommonUtil;
|
||||
import com.reajason.javaweb.utils.CommonUtil;
|
||||
import lombok.*;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.reajason.javaweb.memshell.generator;
|
||||
|
||||
import com.reajason.javaweb.ShellGenerator;
|
||||
import com.reajason.javaweb.memshell.config.ShellConfig;
|
||||
import com.reajason.javaweb.memshell.config.ShellToolConfig;
|
||||
|
||||
|
||||
+1
-1
@@ -2,8 +2,8 @@ package com.reajason.javaweb.memshell.generator;
|
||||
|
||||
import com.reajason.javaweb.memshell.config.BehinderConfig;
|
||||
import com.reajason.javaweb.memshell.config.ShellConfig;
|
||||
import com.reajason.javaweb.memshell.utils.DigestUtils;
|
||||
import net.bytebuddy.dynamic.DynamicType;
|
||||
import org.apache.commons.codec.digest.DigestUtils;
|
||||
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
|
||||
|
||||
+6
-4
@@ -1,13 +1,15 @@
|
||||
package com.reajason.javaweb.memshell.generator;
|
||||
|
||||
import com.reajason.javaweb.ClassBytesShrink;
|
||||
import com.reajason.javaweb.ShellGenerator;
|
||||
import com.reajason.javaweb.buddy.LogRemoveMethodVisitor;
|
||||
import com.reajason.javaweb.buddy.ServletRenameVisitorWrapper;
|
||||
import com.reajason.javaweb.buddy.TargetJreVersionVisitorWrapper;
|
||||
import com.reajason.javaweb.memshell.ServerFactory;
|
||||
import com.reajason.javaweb.memshell.ShellType;
|
||||
import com.reajason.javaweb.memshell.config.ShellConfig;
|
||||
import com.reajason.javaweb.memshell.config.ShellToolConfig;
|
||||
import com.reajason.javaweb.memshell.server.AbstractShell;
|
||||
import com.reajason.javaweb.memshell.server.AbstractServer;
|
||||
import net.bytebuddy.ByteBuddy;
|
||||
import net.bytebuddy.dynamic.DynamicType;
|
||||
|
||||
@@ -36,14 +38,14 @@ public abstract class ByteBuddyShellGenerator<T extends ShellToolConfig> impleme
|
||||
.visit(new TargetJreVersionVisitorWrapper(shellConfig.getTargetJreVersion())));
|
||||
|
||||
String shellType = shellConfig.getShellType();
|
||||
AbstractShell shell = shellConfig.getServer().getShell();
|
||||
AbstractServer server = ServerFactory.getServer(shellConfig.getServer());
|
||||
|
||||
if (ShellType.LISTENER.equals(shellType) || ShellType.JAKARTA_LISTENER.equals(shellType)) {
|
||||
builder = ListenerGenerator.build(builder, shell.getListenerInterceptor(), shellClass, shellClassName);
|
||||
builder = ListenerGenerator.build(builder, server.getListenerInterceptor(), shellClass, shellClassName);
|
||||
}
|
||||
|
||||
if (ShellType.VALVE.equals(shellType) || ShellType.JAKARTA_VALVE.equals(shellType)) {
|
||||
builder = ValveGenerator.build(builder, shell, shellConfig.getServerVersion());
|
||||
builder = ValveGenerator.build(builder, server, shellConfig.getServerVersion());
|
||||
}
|
||||
|
||||
if (shellConfig.isJakarta()) {
|
||||
|
||||
+1
-2
@@ -1,10 +1,9 @@
|
||||
package com.reajason.javaweb.memshell.generator;
|
||||
|
||||
import com.reajason.javaweb.ClassBytesShrink;
|
||||
import com.reajason.javaweb.memshell.config.GodzillaConfig;
|
||||
import com.reajason.javaweb.memshell.config.ShellConfig;
|
||||
import com.reajason.javaweb.memshell.utils.DigestUtils;
|
||||
import net.bytebuddy.dynamic.DynamicType;
|
||||
import org.apache.commons.codec.digest.DigestUtils;
|
||||
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ import com.reajason.javaweb.asm.InnerClassDiscovery;
|
||||
import com.reajason.javaweb.buddy.*;
|
||||
import com.reajason.javaweb.memshell.config.InjectorConfig;
|
||||
import com.reajason.javaweb.memshell.config.ShellConfig;
|
||||
import com.reajason.javaweb.memshell.utils.CommonUtil;
|
||||
import com.reajason.javaweb.utils.CommonUtil;
|
||||
import lombok.SneakyThrows;
|
||||
import net.bytebuddy.ByteBuddy;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
package com.reajason.javaweb.memshell.generator;
|
||||
|
||||
import com.reajason.javaweb.buddy.MethodCallReplaceVisitorWrapper;
|
||||
import com.reajason.javaweb.memshell.utils.ShellCommonUtil;
|
||||
import com.reajason.javaweb.utils.ShellCommonUtil;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.modifier.Ownership;
|
||||
import net.bytebuddy.description.modifier.Visibility;
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package com.reajason.javaweb.memshell.generator;
|
||||
|
||||
import com.reajason.javaweb.GenerationException;
|
||||
import com.reajason.javaweb.memshell.server.AbstractShell;
|
||||
import com.reajason.javaweb.memshell.server.BesShell;
|
||||
import com.reajason.javaweb.memshell.server.TongWebShell;
|
||||
import com.reajason.javaweb.memshell.server.AbstractServer;
|
||||
import com.reajason.javaweb.memshell.server.Bes;
|
||||
import com.reajason.javaweb.memshell.server.TongWeb;
|
||||
import net.bytebuddy.asm.AsmVisitorWrapper;
|
||||
import net.bytebuddy.description.field.FieldDescription;
|
||||
import net.bytebuddy.description.field.FieldList;
|
||||
@@ -30,7 +30,7 @@ public class ValveGenerator {
|
||||
public static final String TONGWEB7_VALVE_PACKAGE = "com.tongweb.catalina";
|
||||
public static final String TONGWEB8_VALVE_PACKAGE = "com.tongweb.server";
|
||||
|
||||
public static DynamicType.Builder<?> build(DynamicType.Builder<?> builder, AbstractShell shell, String serverVersion) {
|
||||
public static DynamicType.Builder<?> build(DynamicType.Builder<?> builder, AbstractServer shell, String serverVersion) {
|
||||
String packageName = null;
|
||||
if (serverVersion.equals("6")) {
|
||||
packageName = TONGWEB6_VALVE_PACKAGE;
|
||||
@@ -38,11 +38,11 @@ public class ValveGenerator {
|
||||
packageName = TONGWEB7_VALVE_PACKAGE;
|
||||
} else if (serverVersion.equals("8")) {
|
||||
packageName = TONGWEB8_VALVE_PACKAGE;
|
||||
} else if (shell instanceof BesShell) {
|
||||
} else if (shell instanceof Bes) {
|
||||
packageName = BES_VALVE_PACKAGE;
|
||||
}
|
||||
if (StringUtils.isEmpty(packageName)) {
|
||||
if (shell instanceof TongWebShell) {
|
||||
if (shell instanceof TongWeb) {
|
||||
throw new GenerationException("serverVersion is needed for TongWeb valve shell, please use 6/7/8 for shellConfig.serverVersion");
|
||||
}
|
||||
return builder;
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@ import com.reajason.javaweb.buddy.ServletRenameVisitorWrapper;
|
||||
import com.reajason.javaweb.memshell.config.CommandConfig;
|
||||
import com.reajason.javaweb.memshell.config.ShellConfig;
|
||||
import com.reajason.javaweb.memshell.generator.ByteBuddyShellGenerator;
|
||||
import com.reajason.javaweb.memshell.utils.ShellCommonUtil;
|
||||
import com.reajason.javaweb.utils.ShellCommonUtil;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.modifier.Ownership;
|
||||
import net.bytebuddy.description.modifier.Visibility;
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
package com.reajason.javaweb.memshell.generator.command;
|
||||
|
||||
import com.reajason.javaweb.memshell.utils.ShellCommonUtil;
|
||||
import com.reajason.javaweb.utils.ShellCommonUtil;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
|
||||
/**
|
||||
|
||||
-3
@@ -2,12 +2,9 @@ package com.reajason.javaweb.memshell.injector.springwebmvc;
|
||||
|
||||
import org.objectweb.asm.*;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.lang.instrument.ClassFileTransformer;
|
||||
import java.lang.instrument.Instrumentation;
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
-3
@@ -2,12 +2,9 @@ package com.reajason.javaweb.memshell.injector.tomcat;
|
||||
|
||||
import org.objectweb.asm.*;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.lang.instrument.ClassFileTransformer;
|
||||
import java.lang.instrument.Instrumentation;
|
||||
import java.security.ProtectionDomain;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
+4
-2
@@ -6,7 +6,10 @@ import java.io.IOException;
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.*;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
|
||||
@@ -36,7 +39,6 @@ public class TongWebFilterInjector {
|
||||
try {
|
||||
Set<Object> contexts = getContext();
|
||||
for (Object context : contexts) {
|
||||
logger.info(context.getClass().getName());
|
||||
Object filter = getShell(context);
|
||||
inject(context, filter);
|
||||
}
|
||||
+2
-2
@@ -12,7 +12,7 @@ import java.util.Set;
|
||||
* @author ReaJason
|
||||
* @since 2024/12/7
|
||||
*/
|
||||
public abstract class AbstractShell {
|
||||
public abstract class AbstractServer {
|
||||
|
||||
private final Map<ShellTool, ToolMapping> map = new LinkedHashMap<>();
|
||||
|
||||
@@ -27,7 +27,7 @@ public abstract class AbstractShell {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected void addToolMapping(ShellTool shellTool, ToolMapping mapping) {
|
||||
public void addToolMapping(ShellTool shellTool, ToolMapping mapping) {
|
||||
map.put(shellTool, mapping);
|
||||
}
|
||||
|
||||
+2
-3
@@ -4,9 +4,8 @@ import com.reajason.javaweb.memshell.injector.apusic.ApusicFilterChainAgentInjec
|
||||
import com.reajason.javaweb.memshell.injector.apusic.ApusicFilterInjector;
|
||||
import com.reajason.javaweb.memshell.injector.apusic.ApusicListenerInjector;
|
||||
import com.reajason.javaweb.memshell.injector.apusic.ApusicServletInjector;
|
||||
import com.reajason.javaweb.memshell.utils.ShellCommonUtil;
|
||||
import com.reajason.javaweb.utils.ShellCommonUtil;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.implementation.bytecode.assign.Assigner;
|
||||
|
||||
import static com.reajason.javaweb.memshell.ShellType.*;
|
||||
|
||||
@@ -14,7 +13,7 @@ import static com.reajason.javaweb.memshell.ShellType.*;
|
||||
* @author ReaJason
|
||||
* @since 2024/12/27
|
||||
*/
|
||||
public class ApusicShell extends AbstractShell {
|
||||
public class Apusic extends AbstractServer {
|
||||
|
||||
public static class ListenerInterceptor {
|
||||
@Advice.OnMethodExit
|
||||
+2
-2
@@ -8,11 +8,11 @@ import static com.reajason.javaweb.memshell.ShellType.*;
|
||||
* @author ReaJason
|
||||
* @since 2024/12/26
|
||||
*/
|
||||
public class BesShell extends AbstractShell {
|
||||
public class Bes extends AbstractServer {
|
||||
|
||||
@Override
|
||||
public Class<?> getListenerInterceptor() {
|
||||
return TomcatShell.ListenerInterceptor.class;
|
||||
return Tomcat.ListenerInterceptor.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
+2
-2
@@ -5,7 +5,7 @@ import com.reajason.javaweb.memshell.injector.glassfish.GlassFishFilterChainAgen
|
||||
import com.reajason.javaweb.memshell.injector.glassfish.GlassFishFilterInjector;
|
||||
import com.reajason.javaweb.memshell.injector.glassfish.GlassFishValveInjector;
|
||||
import com.reajason.javaweb.memshell.injector.tomcat.TomcatListenerInjector;
|
||||
import com.reajason.javaweb.memshell.utils.ShellCommonUtil;
|
||||
import com.reajason.javaweb.utils.ShellCommonUtil;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
|
||||
import static com.reajason.javaweb.memshell.ShellType.*;
|
||||
@@ -14,7 +14,7 @@ import static com.reajason.javaweb.memshell.ShellType.*;
|
||||
* @author ReaJason
|
||||
* @since 2024/12/12
|
||||
*/
|
||||
public class GlassFishShell extends AbstractShell {
|
||||
public class GlassFish extends AbstractServer {
|
||||
|
||||
public static class ListenerInterceptor {
|
||||
|
||||
+2
-4
@@ -4,8 +4,6 @@ import com.reajason.javaweb.memshell.injector.glassfish.GlassFishContextValveAge
|
||||
import com.reajason.javaweb.memshell.injector.glassfish.GlassFishFilterChainAgentInjector;
|
||||
import com.reajason.javaweb.memshell.injector.glassfish.GlassFishValveInjector;
|
||||
import com.reajason.javaweb.memshell.injector.inforsuite.InforSuiteFilterInjector;
|
||||
import com.reajason.javaweb.memshell.injector.tomcat.TomcatContextValveAgentInjector;
|
||||
import com.reajason.javaweb.memshell.injector.tomcat.TomcatFilterChainAgentInjector;
|
||||
import com.reajason.javaweb.memshell.injector.tomcat.TomcatListenerInjector;
|
||||
|
||||
import static com.reajason.javaweb.memshell.ShellType.*;
|
||||
@@ -14,11 +12,11 @@ import static com.reajason.javaweb.memshell.ShellType.*;
|
||||
* @author ReaJason
|
||||
* @since 2024/12/24
|
||||
*/
|
||||
public class InforSuiteShell extends AbstractShell {
|
||||
public class InforSuite extends AbstractServer {
|
||||
|
||||
@Override
|
||||
public Class<?> getListenerInterceptor() {
|
||||
return TomcatShell.ListenerInterceptor.class;
|
||||
return Tomcat.ListenerInterceptor.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
+2
-2
@@ -13,11 +13,11 @@ import static com.reajason.javaweb.memshell.ShellType.*;
|
||||
* @author ReaJason
|
||||
* @since 2024/12/10
|
||||
*/
|
||||
public class JbossShell extends AbstractShell {
|
||||
public class Jboss extends AbstractServer {
|
||||
|
||||
@Override
|
||||
public Class<?> getListenerInterceptor() {
|
||||
return TomcatShell.ListenerInterceptor.class;
|
||||
return Tomcat.ListenerInterceptor.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
+2
-3
@@ -4,9 +4,8 @@ import com.reajason.javaweb.memshell.injector.jetty.JettyFilterInjector;
|
||||
import com.reajason.javaweb.memshell.injector.jetty.JettyHandlerAgentInjector;
|
||||
import com.reajason.javaweb.memshell.injector.jetty.JettyListenerInjector;
|
||||
import com.reajason.javaweb.memshell.injector.jetty.JettyServletInjector;
|
||||
import com.reajason.javaweb.memshell.utils.ShellCommonUtil;
|
||||
import com.reajason.javaweb.utils.ShellCommonUtil;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.implementation.bytecode.assign.Assigner;
|
||||
|
||||
import static com.reajason.javaweb.memshell.ShellType.*;
|
||||
|
||||
@@ -14,7 +13,7 @@ import static com.reajason.javaweb.memshell.ShellType.*;
|
||||
* @author ReaJason
|
||||
* @since 2024/12/7
|
||||
*/
|
||||
public class JettyShell extends AbstractShell {
|
||||
public class Jetty extends AbstractServer {
|
||||
|
||||
public static class ListenerInterceptor {
|
||||
|
||||
+2
-3
@@ -4,9 +4,8 @@ import com.reajason.javaweb.memshell.injector.resin.ResinFilterChainAgentInjecto
|
||||
import com.reajason.javaweb.memshell.injector.resin.ResinFilterInjector;
|
||||
import com.reajason.javaweb.memshell.injector.resin.ResinListenerInjector;
|
||||
import com.reajason.javaweb.memshell.injector.resin.ResinServletInjector;
|
||||
import com.reajason.javaweb.memshell.utils.ShellCommonUtil;
|
||||
import com.reajason.javaweb.utils.ShellCommonUtil;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.implementation.bytecode.assign.Assigner;
|
||||
|
||||
import static com.reajason.javaweb.memshell.ShellType.*;
|
||||
|
||||
@@ -14,7 +13,7 @@ import static com.reajason.javaweb.memshell.ShellType.*;
|
||||
* @author ReaJason
|
||||
* @since 2024/12/14
|
||||
*/
|
||||
public class ResinShell extends AbstractShell {
|
||||
public class Resin extends AbstractServer {
|
||||
|
||||
public static class ListenerInterceptor {
|
||||
@Advice.OnMethodExit
|
||||
@@ -1,33 +0,0 @@
|
||||
package com.reajason.javaweb.memshell.server;
|
||||
|
||||
import com.reajason.javaweb.memshell.Server;
|
||||
import com.reajason.javaweb.memshell.ShellTool;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2025/2/22
|
||||
*/
|
||||
public class ServerToolRegistry {
|
||||
|
||||
public static void addToolMapping(ShellTool shellTool, ToolMapping toolMapping) {
|
||||
Map<String, Class<?>> rawToolMapping = toolMapping.getShellClassMap();
|
||||
for (Server value : Server.values()) {
|
||||
AbstractShell shell = value.getShell();
|
||||
InjectorMapping shellInjectorMapping = shell.getShellInjectorMapping();
|
||||
Set<String> injectorSupportedShellTypes = shellInjectorMapping.getSupportedShellTypes();
|
||||
ToolMapping.ToolMappingBuilder toolMappingBuilder = ToolMapping.builder();
|
||||
|
||||
for (String shellType : injectorSupportedShellTypes) {
|
||||
Class<?> shellClass = rawToolMapping.get(shellType);
|
||||
if (shellClass == null) {
|
||||
continue;
|
||||
}
|
||||
toolMappingBuilder.addShellClass(shellType, shellClass);
|
||||
}
|
||||
shell.addToolMapping(shellTool, toolMappingBuilder.build());
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -11,7 +11,7 @@ import static com.reajason.javaweb.memshell.ShellType.*;
|
||||
* @author ReaJason
|
||||
* @since 2024/12/24
|
||||
*/
|
||||
public class SpringWebFluxShell extends AbstractShell {
|
||||
public class SpringWebFlux extends AbstractServer {
|
||||
|
||||
@Override
|
||||
public InjectorMapping getShellInjectorMapping() {
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user