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;
|
package com.reajason.javaweb.boot;
|
||||||
|
|
||||||
import com.reajason.javaweb.memshell.Server;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author ReaJason
|
* @author ReaJason
|
||||||
*/
|
*/
|
||||||
@@ -16,8 +13,5 @@ public class BootApplication {
|
|||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
SpringApplication.run(BootApplication.class, 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;
|
package com.reajason.javaweb.boot.controller;
|
||||||
|
|
||||||
import com.reajason.javaweb.boot.vo.CommandConfigVO;
|
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.ShellTool;
|
||||||
import com.reajason.javaweb.memshell.config.CommandConfig;
|
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 com.reajason.javaweb.packer.Packers;
|
||||||
import org.springframework.web.bind.annotation.CrossOrigin;
|
import org.springframework.web.bind.annotation.CrossOrigin;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
@@ -25,11 +25,10 @@ public class ConfigController {
|
|||||||
@RequestMapping("/servers")
|
@RequestMapping("/servers")
|
||||||
public Map<String, List<String>> getServers() {
|
public Map<String, List<String>> getServers() {
|
||||||
Map<String, List<String>> servers = new LinkedHashMap<>();
|
Map<String, List<String>> servers = new LinkedHashMap<>();
|
||||||
for (Server server : Server.values()) {
|
List<String> supportedServers = ServerFactory.getSupportedServers();
|
||||||
if (server.getShell() != null) {
|
for (String supportedServer : supportedServers) {
|
||||||
Set<String> supportedShellTypes = server.getShell().getShellInjectorMapping().getSupportedShellTypes();
|
Set<String> supportedShellTypes = ServerFactory.getServer(supportedServer).getShellInjectorMapping().getSupportedShellTypes();
|
||||||
servers.put(server.name(), supportedShellTypes.stream().toList());
|
servers.put(supportedServer, supportedShellTypes.stream().toList());
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return servers;
|
return servers;
|
||||||
}
|
}
|
||||||
@@ -44,20 +43,21 @@ public class ConfigController {
|
|||||||
@RequestMapping
|
@RequestMapping
|
||||||
public Map<String, Map<?, ?>> config() {
|
public Map<String, Map<?, ?>> config() {
|
||||||
Map<String, Map<?, ?>> coreMap = new HashMap<>(16);
|
Map<String, Map<?, ?>> coreMap = new HashMap<>(16);
|
||||||
for (Server value : Server.values()) {
|
List<String> supportedServers = ServerFactory.getSupportedServers();
|
||||||
AbstractShell shell = value.getShell();
|
for (String supportedServer : supportedServers) {
|
||||||
if (shell == null) {
|
AbstractServer server = ServerFactory.getServer(supportedServer);
|
||||||
|
if (server == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Map<String, Set<String>> map = new LinkedHashMap<>(16);
|
Map<String, Set<String>> map = new LinkedHashMap<>(16);
|
||||||
for (ShellTool shellTool : shell.getSupportedShellTools()) {
|
for (ShellTool shellTool : server.getSupportedShellTools()) {
|
||||||
Set<String> supportedShellTypes = shell.getSupportedShellTypes(shellTool);
|
Set<String> supportedShellTypes = server.getSupportedShellTypes(shellTool);
|
||||||
if (supportedShellTypes.isEmpty()) {
|
if (supportedShellTypes.isEmpty()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
map.put(shellTool.name(), supportedShellTypes);
|
map.put(shellTool.name(), supportedShellTypes);
|
||||||
}
|
}
|
||||||
coreMap.put(value.name(), map);
|
coreMap.put(supportedServer, map);
|
||||||
}
|
}
|
||||||
return coreMap;
|
return coreMap;
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-8
@@ -1,7 +1,7 @@
|
|||||||
package com.reajason.javaweb.boot.controller;
|
package com.reajason.javaweb.boot.controller;
|
||||||
|
|
||||||
import com.reajason.javaweb.boot.dto.GenerateRequest;
|
import com.reajason.javaweb.boot.dto.MemShellGenerateRequest;
|
||||||
import com.reajason.javaweb.boot.dto.GenerateResponse;
|
import com.reajason.javaweb.boot.dto.MemShellGenerateResponse;
|
||||||
import com.reajason.javaweb.memshell.MemShellGenerator;
|
import com.reajason.javaweb.memshell.MemShellGenerator;
|
||||||
import com.reajason.javaweb.memshell.MemShellResult;
|
import com.reajason.javaweb.memshell.MemShellResult;
|
||||||
import com.reajason.javaweb.memshell.config.InjectorConfig;
|
import com.reajason.javaweb.memshell.config.InjectorConfig;
|
||||||
@@ -19,22 +19,22 @@ import java.util.Base64;
|
|||||||
* @since 2024/12/18
|
* @since 2024/12/18
|
||||||
*/
|
*/
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/generate")
|
@RequestMapping("/memshell/generate")
|
||||||
@CrossOrigin("*")
|
@CrossOrigin("*")
|
||||||
public class GeneratorController {
|
public class MemShellGeneratorController {
|
||||||
@PostMapping
|
@PostMapping
|
||||||
public GenerateResponse generate(@RequestBody GenerateRequest request) {
|
public MemShellGenerateResponse generate(@RequestBody MemShellGenerateRequest request) {
|
||||||
ShellConfig shellConfig = request.getShellConfig();
|
ShellConfig shellConfig = request.getShellConfig();
|
||||||
ShellToolConfig shellToolConfig = request.parseShellToolConfig();
|
ShellToolConfig shellToolConfig = request.parseShellToolConfig();
|
||||||
InjectorConfig injectorConfig = request.getInjectorConfig();
|
InjectorConfig injectorConfig = request.getInjectorConfig();
|
||||||
MemShellResult generateResult = MemShellGenerator.generate(shellConfig, injectorConfig, shellToolConfig);
|
MemShellResult generateResult = MemShellGenerator.generate(shellConfig, injectorConfig, shellToolConfig);
|
||||||
Packer packer = request.getPacker().getInstance();
|
Packer packer = request.getPacker().getInstance();
|
||||||
if (packer instanceof JarPacker) {
|
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) {
|
} else if (packer instanceof AggregatePacker) {
|
||||||
return new GenerateResponse(generateResult, ((AggregatePacker) packer).packAll(generateResult.toClassPackerConfig()));
|
return new MemShellGenerateResponse(generateResult, ((AggregatePacker) packer).packAll(generateResult.toClassPackerConfig()));
|
||||||
} else {
|
} 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;
|
package com.reajason.javaweb.boot.dto;
|
||||||
|
|
||||||
import com.reajason.javaweb.memshell.config.*;
|
import com.reajason.javaweb.memshell.config.*;
|
||||||
import com.reajason.javaweb.memshell.utils.CommonUtil;
|
|
||||||
import com.reajason.javaweb.packer.Packers;
|
import com.reajason.javaweb.packer.Packers;
|
||||||
|
import com.reajason.javaweb.utils.CommonUtil;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
@@ -11,7 +11,7 @@ import org.apache.commons.lang3.StringUtils;
|
|||||||
* @since 2024/12/18
|
* @since 2024/12/18
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
public class GenerateRequest {
|
public class MemShellGenerateRequest {
|
||||||
private ShellConfig shellConfig;
|
private ShellConfig shellConfig;
|
||||||
private ShellToolConfigDTO shellToolConfig;
|
private ShellToolConfigDTO shellToolConfig;
|
||||||
private InjectorConfig injectorConfig;
|
private InjectorConfig injectorConfig;
|
||||||
+6
-6
@@ -12,18 +12,18 @@ import java.util.Map;
|
|||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
public class GenerateResponse {
|
public class MemShellGenerateResponse {
|
||||||
private MemShellResult generateResult;
|
private MemShellResult memShellResult;
|
||||||
private String packResult;
|
private String packResult;
|
||||||
private Map<String, String> allPackResults;
|
private Map<String, String> allPackResults;
|
||||||
|
|
||||||
public GenerateResponse(MemShellResult generateResult, String packResult) {
|
public MemShellGenerateResponse(MemShellResult memShellResult, String packResult) {
|
||||||
this.generateResult = generateResult;
|
this.memShellResult = memShellResult;
|
||||||
this.packResult = packResult;
|
this.packResult = packResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
public GenerateResponse(MemShellResult generateResult, Map<String, String> allPackResults) {
|
public MemShellGenerateResponse(MemShellResult memShellResult, Map<String, String> allPackResults) {
|
||||||
this.allPackResults = 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
|
* @since 2025/8/10
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
public class ProbeGenerateRequest {
|
public class ProbeShellGenerateRequest {
|
||||||
private ProbeConfig probeConfig;
|
private ProbeConfig probeConfig;
|
||||||
private ProbeContentConfigDTO probeContentConfig;
|
private ProbeContentConfigDTO probeContentConfig;
|
||||||
private Packers packer;
|
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 {
|
plugins {
|
||||||
id("java")
|
id("java")
|
||||||
|
id("idea")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
idea {
|
||||||
|
module {
|
||||||
|
excludeDirs.add(file("src"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
version = "2.0.0-SNAPSHOT"
|
version = "2.0.0-SNAPSHOT"
|
||||||
|
|
||||||
tasks.register("publishAllToMavenCentral") {
|
tasks.register("publishAllToMavenCentral") {
|
||||||
|
|||||||
@@ -29,17 +29,19 @@ tasks.test {
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(":memshell-party-common"))
|
implementation(project(":memshell-party-common"))
|
||||||
implementation(project(":packer"))
|
implementation(project(":packer"))
|
||||||
implementation(project(":memshell"))
|
implementation(libs.byte.buddy)
|
||||||
implementation(libs.bundles.jna)
|
implementation(libs.asm.commons)
|
||||||
implementation(libs.javax.servlet.api)
|
|
||||||
implementation(libs.javax.websocket.api)
|
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.bcel)
|
||||||
implementation(libs.okhttp3)
|
implementation(libs.okhttp3)
|
||||||
implementation(libs.logback.classic)
|
implementation(libs.logback.classic)
|
||||||
implementation(libs.jackson.databind)
|
implementation(libs.jackson.databind)
|
||||||
implementation(libs.spring.webmvc)
|
|
||||||
implementation(libs.spring.webflux)
|
|
||||||
implementation(libs.reactor.netty.core)
|
|
||||||
testImplementation(libs.junit.jupiter)
|
testImplementation(libs.junit.jupiter)
|
||||||
testRuntimeOnly(libs.junit.platform.launcher)
|
testRuntimeOnly(libs.junit.platform.launcher)
|
||||||
testImplementation(libs.bundles.mockito)
|
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
|
* @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.ShellConfig;
|
||||||
import com.reajason.javaweb.memshell.config.ShellToolConfig;
|
import com.reajason.javaweb.memshell.config.ShellToolConfig;
|
||||||
import com.reajason.javaweb.memshell.generator.InjectorGenerator;
|
import com.reajason.javaweb.memshell.generator.InjectorGenerator;
|
||||||
import com.reajason.javaweb.memshell.server.AbstractShell;
|
import com.reajason.javaweb.memshell.server.AbstractServer;
|
||||||
import com.reajason.javaweb.memshell.utils.CommonUtil;
|
import com.reajason.javaweb.utils.CommonUtil;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
@@ -18,14 +18,14 @@ import java.util.Map;
|
|||||||
public class MemShellGenerator {
|
public class MemShellGenerator {
|
||||||
|
|
||||||
public static MemShellResult generate(ShellConfig shellConfig, InjectorConfig injectorConfig, ShellToolConfig shellToolConfig) {
|
public static MemShellResult generate(ShellConfig shellConfig, InjectorConfig injectorConfig, ShellToolConfig shellToolConfig) {
|
||||||
Server server = shellConfig.getServer();
|
String serverName = shellConfig.getServer();
|
||||||
AbstractShell shell = server.getShell();
|
AbstractServer server = ServerFactory.getServer(serverName);
|
||||||
if (shell == null) {
|
if (server == null) {
|
||||||
throw new IllegalArgumentException("Unsupported server: " + server);
|
throw new IllegalArgumentException("Unsupported server: " + serverName);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (StringUtils.isBlank(shellToolConfig.getShellClassName())) {
|
if (StringUtils.isBlank(shellToolConfig.getShellClassName())) {
|
||||||
shellToolConfig.setShellClassName(CommonUtil.generateShellClassName(server, shellConfig.getShellType()));
|
shellToolConfig.setShellClassName(CommonUtil.generateShellClassName(serverName, shellConfig.getShellType()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (StringUtils.isBlank(injectorConfig.getInjectorClassName())) {
|
if (StringUtils.isBlank(injectorConfig.getInjectorClassName())) {
|
||||||
@@ -35,11 +35,11 @@ public class MemShellGenerator {
|
|||||||
Class<?> injectorClass = null;
|
Class<?> injectorClass = null;
|
||||||
|
|
||||||
if (ShellTool.Custom.equals(shellConfig.getShellTool())) {
|
if (ShellTool.Custom.equals(shellConfig.getShellTool())) {
|
||||||
injectorClass = shellConfig.getServer().getShell().getShellInjectorMapping().getInjector(shellConfig.getShellType());
|
injectorClass = server.getShellInjectorMapping().getInjector(shellConfig.getShellType());
|
||||||
} else {
|
} 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) {
|
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();
|
Class<?> shellClass = shellInjectorPair.getLeft();
|
||||||
injectorClass = shellInjectorPair.getRight();
|
injectorClass = shellInjectorPair.getRight();
|
||||||
|
|||||||
+78
-89
@@ -1,5 +1,6 @@
|
|||||||
package com.reajason.javaweb.memshell;
|
package com.reajason.javaweb.memshell;
|
||||||
|
|
||||||
|
import com.reajason.javaweb.Server;
|
||||||
import com.reajason.javaweb.memshell.server.*;
|
import com.reajason.javaweb.memshell.server.*;
|
||||||
import com.reajason.javaweb.memshell.shelltool.antsword.*;
|
import com.reajason.javaweb.memshell.shelltool.antsword.*;
|
||||||
import com.reajason.javaweb.memshell.shelltool.behinder.*;
|
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.godzilla.*;
|
||||||
import com.reajason.javaweb.memshell.shelltool.neoreg.*;
|
import com.reajason.javaweb.memshell.shelltool.neoreg.*;
|
||||||
import com.reajason.javaweb.memshell.shelltool.suo5.*;
|
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.ShellType.*;
|
||||||
import static com.reajason.javaweb.memshell.server.ServerToolRegistry.addToolMapping;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author ReaJason
|
* @author ReaJason
|
||||||
* @since 2024/11/22
|
* @since 2025/8/11
|
||||||
*/
|
*/
|
||||||
@Getter
|
public class ServerFactory {
|
||||||
public enum Server {
|
private static final Map<String, Supplier<AbstractServer>> registry = new ConcurrentHashMap<>();
|
||||||
/**
|
private static final Map<String, AbstractServer> instances = new ConcurrentHashMap<>();
|
||||||
* Tomcat 中间件
|
private static final List<String> servers = new CopyOnWriteArrayList<>();
|
||||||
*/
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
static {
|
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()
|
addToolMapping(ShellTool.Godzilla, ToolMapping.builder()
|
||||||
.addShellClass(SERVLET, GodzillaServlet.class)
|
.addShellClass(SERVLET, GodzillaServlet.class)
|
||||||
.addShellClass(JAKARTA_SERVLET, GodzillaServlet.class)
|
.addShellClass(JAKARTA_SERVLET, GodzillaServlet.class)
|
||||||
@@ -253,4 +195,51 @@ public enum Server {
|
|||||||
.addShellClass(WAS_AGENT_FILTER_MANAGER, NeoreGeorg.class)
|
.addShellClass(WAS_AGENT_FILTER_MANAGER, NeoreGeorg.class)
|
||||||
.build());
|
.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;
|
package com.reajason.javaweb.memshell;
|
||||||
|
|
||||||
|
import com.reajason.javaweb.ShellGenerator;
|
||||||
import com.reajason.javaweb.memshell.config.*;
|
import com.reajason.javaweb.memshell.config.*;
|
||||||
import com.reajason.javaweb.memshell.generator.*;
|
import com.reajason.javaweb.memshell.generator.*;
|
||||||
import com.reajason.javaweb.memshell.generator.command.CommandGenerator;
|
import com.reajason.javaweb.memshell.generator.command.CommandGenerator;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.reajason.javaweb.memshell.config;
|
package com.reajason.javaweb.memshell.config;
|
||||||
|
|
||||||
import com.reajason.javaweb.memshell.utils.CommonUtil;
|
import com.reajason.javaweb.utils.CommonUtil;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.reajason.javaweb.memshell.config;
|
package com.reajason.javaweb.memshell.config;
|
||||||
|
|
||||||
import com.reajason.javaweb.memshell.utils.CommonUtil;
|
import com.reajason.javaweb.utils.CommonUtil;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.reajason.javaweb.memshell.config;
|
package com.reajason.javaweb.memshell.config;
|
||||||
|
|
||||||
import com.reajason.javaweb.memshell.utils.CommonUtil;
|
import com.reajason.javaweb.utils.CommonUtil;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.reajason.javaweb.memshell.config;
|
package com.reajason.javaweb.memshell.config;
|
||||||
|
|
||||||
import com.reajason.javaweb.memshell.utils.CommonUtil;
|
import com.reajason.javaweb.utils.CommonUtil;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.reajason.javaweb.memshell.config;
|
package com.reajason.javaweb.memshell.config;
|
||||||
|
|
||||||
import com.reajason.javaweb.memshell.utils.CommonUtil;
|
import com.reajason.javaweb.utils.CommonUtil;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.reajason.javaweb.memshell.config;
|
package com.reajason.javaweb.memshell.config;
|
||||||
|
|
||||||
import com.reajason.javaweb.memshell.utils.CommonUtil;
|
import com.reajason.javaweb.utils.CommonUtil;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package com.reajason.javaweb.memshell.config;
|
package com.reajason.javaweb.memshell.config;
|
||||||
|
|
||||||
import com.reajason.javaweb.memshell.Server;
|
|
||||||
import com.reajason.javaweb.memshell.ShellTool;
|
import com.reajason.javaweb.memshell.ShellTool;
|
||||||
import com.reajason.javaweb.memshell.ShellType;
|
import com.reajason.javaweb.memshell.ShellType;
|
||||||
import lombok.AllArgsConstructor;
|
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;
|
package com.reajason.javaweb.memshell.config;
|
||||||
|
|
||||||
import com.reajason.javaweb.memshell.utils.CommonUtil;
|
import com.reajason.javaweb.utils.CommonUtil;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.reajason.javaweb.memshell.generator;
|
package com.reajason.javaweb.memshell.generator;
|
||||||
|
|
||||||
|
import com.reajason.javaweb.ShellGenerator;
|
||||||
import com.reajason.javaweb.memshell.config.ShellConfig;
|
import com.reajason.javaweb.memshell.config.ShellConfig;
|
||||||
import com.reajason.javaweb.memshell.config.ShellToolConfig;
|
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.BehinderConfig;
|
||||||
import com.reajason.javaweb.memshell.config.ShellConfig;
|
import com.reajason.javaweb.memshell.config.ShellConfig;
|
||||||
import com.reajason.javaweb.memshell.utils.DigestUtils;
|
|
||||||
import net.bytebuddy.dynamic.DynamicType;
|
import net.bytebuddy.dynamic.DynamicType;
|
||||||
|
import org.apache.commons.codec.digest.DigestUtils;
|
||||||
|
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||||
|
|
||||||
|
|||||||
+6
-4
@@ -1,13 +1,15 @@
|
|||||||
package com.reajason.javaweb.memshell.generator;
|
package com.reajason.javaweb.memshell.generator;
|
||||||
|
|
||||||
import com.reajason.javaweb.ClassBytesShrink;
|
import com.reajason.javaweb.ClassBytesShrink;
|
||||||
|
import com.reajason.javaweb.ShellGenerator;
|
||||||
import com.reajason.javaweb.buddy.LogRemoveMethodVisitor;
|
import com.reajason.javaweb.buddy.LogRemoveMethodVisitor;
|
||||||
import com.reajason.javaweb.buddy.ServletRenameVisitorWrapper;
|
import com.reajason.javaweb.buddy.ServletRenameVisitorWrapper;
|
||||||
import com.reajason.javaweb.buddy.TargetJreVersionVisitorWrapper;
|
import com.reajason.javaweb.buddy.TargetJreVersionVisitorWrapper;
|
||||||
|
import com.reajason.javaweb.memshell.ServerFactory;
|
||||||
import com.reajason.javaweb.memshell.ShellType;
|
import com.reajason.javaweb.memshell.ShellType;
|
||||||
import com.reajason.javaweb.memshell.config.ShellConfig;
|
import com.reajason.javaweb.memshell.config.ShellConfig;
|
||||||
import com.reajason.javaweb.memshell.config.ShellToolConfig;
|
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.ByteBuddy;
|
||||||
import net.bytebuddy.dynamic.DynamicType;
|
import net.bytebuddy.dynamic.DynamicType;
|
||||||
|
|
||||||
@@ -36,14 +38,14 @@ public abstract class ByteBuddyShellGenerator<T extends ShellToolConfig> impleme
|
|||||||
.visit(new TargetJreVersionVisitorWrapper(shellConfig.getTargetJreVersion())));
|
.visit(new TargetJreVersionVisitorWrapper(shellConfig.getTargetJreVersion())));
|
||||||
|
|
||||||
String shellType = shellConfig.getShellType();
|
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)) {
|
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)) {
|
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()) {
|
if (shellConfig.isJakarta()) {
|
||||||
|
|||||||
+1
-2
@@ -1,10 +1,9 @@
|
|||||||
package com.reajason.javaweb.memshell.generator;
|
package com.reajason.javaweb.memshell.generator;
|
||||||
|
|
||||||
import com.reajason.javaweb.ClassBytesShrink;
|
|
||||||
import com.reajason.javaweb.memshell.config.GodzillaConfig;
|
import com.reajason.javaweb.memshell.config.GodzillaConfig;
|
||||||
import com.reajason.javaweb.memshell.config.ShellConfig;
|
import com.reajason.javaweb.memshell.config.ShellConfig;
|
||||||
import com.reajason.javaweb.memshell.utils.DigestUtils;
|
|
||||||
import net.bytebuddy.dynamic.DynamicType;
|
import net.bytebuddy.dynamic.DynamicType;
|
||||||
|
import org.apache.commons.codec.digest.DigestUtils;
|
||||||
|
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
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.buddy.*;
|
||||||
import com.reajason.javaweb.memshell.config.InjectorConfig;
|
import com.reajason.javaweb.memshell.config.InjectorConfig;
|
||||||
import com.reajason.javaweb.memshell.config.ShellConfig;
|
import com.reajason.javaweb.memshell.config.ShellConfig;
|
||||||
import com.reajason.javaweb.memshell.utils.CommonUtil;
|
import com.reajason.javaweb.utils.CommonUtil;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import net.bytebuddy.ByteBuddy;
|
import net.bytebuddy.ByteBuddy;
|
||||||
import net.bytebuddy.description.type.TypeDescription;
|
import net.bytebuddy.description.type.TypeDescription;
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
package com.reajason.javaweb.memshell.generator;
|
package com.reajason.javaweb.memshell.generator;
|
||||||
|
|
||||||
import com.reajason.javaweb.buddy.MethodCallReplaceVisitorWrapper;
|
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.asm.Advice;
|
||||||
import net.bytebuddy.description.modifier.Ownership;
|
import net.bytebuddy.description.modifier.Ownership;
|
||||||
import net.bytebuddy.description.modifier.Visibility;
|
import net.bytebuddy.description.modifier.Visibility;
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package com.reajason.javaweb.memshell.generator;
|
package com.reajason.javaweb.memshell.generator;
|
||||||
|
|
||||||
import com.reajason.javaweb.GenerationException;
|
import com.reajason.javaweb.GenerationException;
|
||||||
import com.reajason.javaweb.memshell.server.AbstractShell;
|
import com.reajason.javaweb.memshell.server.AbstractServer;
|
||||||
import com.reajason.javaweb.memshell.server.BesShell;
|
import com.reajason.javaweb.memshell.server.Bes;
|
||||||
import com.reajason.javaweb.memshell.server.TongWebShell;
|
import com.reajason.javaweb.memshell.server.TongWeb;
|
||||||
import net.bytebuddy.asm.AsmVisitorWrapper;
|
import net.bytebuddy.asm.AsmVisitorWrapper;
|
||||||
import net.bytebuddy.description.field.FieldDescription;
|
import net.bytebuddy.description.field.FieldDescription;
|
||||||
import net.bytebuddy.description.field.FieldList;
|
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 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 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;
|
String packageName = null;
|
||||||
if (serverVersion.equals("6")) {
|
if (serverVersion.equals("6")) {
|
||||||
packageName = TONGWEB6_VALVE_PACKAGE;
|
packageName = TONGWEB6_VALVE_PACKAGE;
|
||||||
@@ -38,11 +38,11 @@ public class ValveGenerator {
|
|||||||
packageName = TONGWEB7_VALVE_PACKAGE;
|
packageName = TONGWEB7_VALVE_PACKAGE;
|
||||||
} else if (serverVersion.equals("8")) {
|
} else if (serverVersion.equals("8")) {
|
||||||
packageName = TONGWEB8_VALVE_PACKAGE;
|
packageName = TONGWEB8_VALVE_PACKAGE;
|
||||||
} else if (shell instanceof BesShell) {
|
} else if (shell instanceof Bes) {
|
||||||
packageName = BES_VALVE_PACKAGE;
|
packageName = BES_VALVE_PACKAGE;
|
||||||
}
|
}
|
||||||
if (StringUtils.isEmpty(packageName)) {
|
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");
|
throw new GenerationException("serverVersion is needed for TongWeb valve shell, please use 6/7/8 for shellConfig.serverVersion");
|
||||||
}
|
}
|
||||||
return builder;
|
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.CommandConfig;
|
||||||
import com.reajason.javaweb.memshell.config.ShellConfig;
|
import com.reajason.javaweb.memshell.config.ShellConfig;
|
||||||
import com.reajason.javaweb.memshell.generator.ByteBuddyShellGenerator;
|
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.asm.Advice;
|
||||||
import net.bytebuddy.description.modifier.Ownership;
|
import net.bytebuddy.description.modifier.Ownership;
|
||||||
import net.bytebuddy.description.modifier.Visibility;
|
import net.bytebuddy.description.modifier.Visibility;
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
package com.reajason.javaweb.memshell.generator.command;
|
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;
|
import net.bytebuddy.asm.Advice;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
-3
@@ -2,12 +2,9 @@ package com.reajason.javaweb.memshell.injector.springwebmvc;
|
|||||||
|
|
||||||
import org.objectweb.asm.*;
|
import org.objectweb.asm.*;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.lang.instrument.ClassFileTransformer;
|
import java.lang.instrument.ClassFileTransformer;
|
||||||
import java.lang.instrument.Instrumentation;
|
import java.lang.instrument.Instrumentation;
|
||||||
import java.security.ProtectionDomain;
|
import java.security.ProtectionDomain;
|
||||||
import java.util.zip.GZIPInputStream;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author ReaJason
|
* @author ReaJason
|
||||||
-3
@@ -2,12 +2,9 @@ package com.reajason.javaweb.memshell.injector.tomcat;
|
|||||||
|
|
||||||
import org.objectweb.asm.*;
|
import org.objectweb.asm.*;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.lang.instrument.ClassFileTransformer;
|
import java.lang.instrument.ClassFileTransformer;
|
||||||
import java.lang.instrument.Instrumentation;
|
import java.lang.instrument.Instrumentation;
|
||||||
import java.security.ProtectionDomain;
|
import java.security.ProtectionDomain;
|
||||||
import java.util.zip.GZIPInputStream;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author ReaJason
|
* @author ReaJason
|
||||||
+4
-2
@@ -6,7 +6,10 @@ import java.io.IOException;
|
|||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
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.logging.Logger;
|
||||||
import java.util.zip.GZIPInputStream;
|
import java.util.zip.GZIPInputStream;
|
||||||
|
|
||||||
@@ -36,7 +39,6 @@ public class TongWebFilterInjector {
|
|||||||
try {
|
try {
|
||||||
Set<Object> contexts = getContext();
|
Set<Object> contexts = getContext();
|
||||||
for (Object context : contexts) {
|
for (Object context : contexts) {
|
||||||
logger.info(context.getClass().getName());
|
|
||||||
Object filter = getShell(context);
|
Object filter = getShell(context);
|
||||||
inject(context, filter);
|
inject(context, filter);
|
||||||
}
|
}
|
||||||
+2
-2
@@ -12,7 +12,7 @@ import java.util.Set;
|
|||||||
* @author ReaJason
|
* @author ReaJason
|
||||||
* @since 2024/12/7
|
* @since 2024/12/7
|
||||||
*/
|
*/
|
||||||
public abstract class AbstractShell {
|
public abstract class AbstractServer {
|
||||||
|
|
||||||
private final Map<ShellTool, ToolMapping> map = new LinkedHashMap<>();
|
private final Map<ShellTool, ToolMapping> map = new LinkedHashMap<>();
|
||||||
|
|
||||||
@@ -27,7 +27,7 @@ public abstract class AbstractShell {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void addToolMapping(ShellTool shellTool, ToolMapping mapping) {
|
public void addToolMapping(ShellTool shellTool, ToolMapping mapping) {
|
||||||
map.put(shellTool, 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.ApusicFilterInjector;
|
||||||
import com.reajason.javaweb.memshell.injector.apusic.ApusicListenerInjector;
|
import com.reajason.javaweb.memshell.injector.apusic.ApusicListenerInjector;
|
||||||
import com.reajason.javaweb.memshell.injector.apusic.ApusicServletInjector;
|
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.asm.Advice;
|
||||||
import net.bytebuddy.implementation.bytecode.assign.Assigner;
|
|
||||||
|
|
||||||
import static com.reajason.javaweb.memshell.ShellType.*;
|
import static com.reajason.javaweb.memshell.ShellType.*;
|
||||||
|
|
||||||
@@ -14,7 +13,7 @@ import static com.reajason.javaweb.memshell.ShellType.*;
|
|||||||
* @author ReaJason
|
* @author ReaJason
|
||||||
* @since 2024/12/27
|
* @since 2024/12/27
|
||||||
*/
|
*/
|
||||||
public class ApusicShell extends AbstractShell {
|
public class Apusic extends AbstractServer {
|
||||||
|
|
||||||
public static class ListenerInterceptor {
|
public static class ListenerInterceptor {
|
||||||
@Advice.OnMethodExit
|
@Advice.OnMethodExit
|
||||||
+2
-2
@@ -8,11 +8,11 @@ import static com.reajason.javaweb.memshell.ShellType.*;
|
|||||||
* @author ReaJason
|
* @author ReaJason
|
||||||
* @since 2024/12/26
|
* @since 2024/12/26
|
||||||
*/
|
*/
|
||||||
public class BesShell extends AbstractShell {
|
public class Bes extends AbstractServer {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Class<?> getListenerInterceptor() {
|
public Class<?> getListenerInterceptor() {
|
||||||
return TomcatShell.ListenerInterceptor.class;
|
return Tomcat.ListenerInterceptor.class;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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.GlassFishFilterInjector;
|
||||||
import com.reajason.javaweb.memshell.injector.glassfish.GlassFishValveInjector;
|
import com.reajason.javaweb.memshell.injector.glassfish.GlassFishValveInjector;
|
||||||
import com.reajason.javaweb.memshell.injector.tomcat.TomcatListenerInjector;
|
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 net.bytebuddy.asm.Advice;
|
||||||
|
|
||||||
import static com.reajason.javaweb.memshell.ShellType.*;
|
import static com.reajason.javaweb.memshell.ShellType.*;
|
||||||
@@ -14,7 +14,7 @@ import static com.reajason.javaweb.memshell.ShellType.*;
|
|||||||
* @author ReaJason
|
* @author ReaJason
|
||||||
* @since 2024/12/12
|
* @since 2024/12/12
|
||||||
*/
|
*/
|
||||||
public class GlassFishShell extends AbstractShell {
|
public class GlassFish extends AbstractServer {
|
||||||
|
|
||||||
public static class ListenerInterceptor {
|
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.GlassFishFilterChainAgentInjector;
|
||||||
import com.reajason.javaweb.memshell.injector.glassfish.GlassFishValveInjector;
|
import com.reajason.javaweb.memshell.injector.glassfish.GlassFishValveInjector;
|
||||||
import com.reajason.javaweb.memshell.injector.inforsuite.InforSuiteFilterInjector;
|
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 com.reajason.javaweb.memshell.injector.tomcat.TomcatListenerInjector;
|
||||||
|
|
||||||
import static com.reajason.javaweb.memshell.ShellType.*;
|
import static com.reajason.javaweb.memshell.ShellType.*;
|
||||||
@@ -14,11 +12,11 @@ import static com.reajason.javaweb.memshell.ShellType.*;
|
|||||||
* @author ReaJason
|
* @author ReaJason
|
||||||
* @since 2024/12/24
|
* @since 2024/12/24
|
||||||
*/
|
*/
|
||||||
public class InforSuiteShell extends AbstractShell {
|
public class InforSuite extends AbstractServer {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Class<?> getListenerInterceptor() {
|
public Class<?> getListenerInterceptor() {
|
||||||
return TomcatShell.ListenerInterceptor.class;
|
return Tomcat.ListenerInterceptor.class;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
+2
-2
@@ -13,11 +13,11 @@ import static com.reajason.javaweb.memshell.ShellType.*;
|
|||||||
* @author ReaJason
|
* @author ReaJason
|
||||||
* @since 2024/12/10
|
* @since 2024/12/10
|
||||||
*/
|
*/
|
||||||
public class JbossShell extends AbstractShell {
|
public class Jboss extends AbstractServer {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Class<?> getListenerInterceptor() {
|
public Class<?> getListenerInterceptor() {
|
||||||
return TomcatShell.ListenerInterceptor.class;
|
return Tomcat.ListenerInterceptor.class;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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.JettyHandlerAgentInjector;
|
||||||
import com.reajason.javaweb.memshell.injector.jetty.JettyListenerInjector;
|
import com.reajason.javaweb.memshell.injector.jetty.JettyListenerInjector;
|
||||||
import com.reajason.javaweb.memshell.injector.jetty.JettyServletInjector;
|
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.asm.Advice;
|
||||||
import net.bytebuddy.implementation.bytecode.assign.Assigner;
|
|
||||||
|
|
||||||
import static com.reajason.javaweb.memshell.ShellType.*;
|
import static com.reajason.javaweb.memshell.ShellType.*;
|
||||||
|
|
||||||
@@ -14,7 +13,7 @@ import static com.reajason.javaweb.memshell.ShellType.*;
|
|||||||
* @author ReaJason
|
* @author ReaJason
|
||||||
* @since 2024/12/7
|
* @since 2024/12/7
|
||||||
*/
|
*/
|
||||||
public class JettyShell extends AbstractShell {
|
public class Jetty extends AbstractServer {
|
||||||
|
|
||||||
public static class ListenerInterceptor {
|
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.ResinFilterInjector;
|
||||||
import com.reajason.javaweb.memshell.injector.resin.ResinListenerInjector;
|
import com.reajason.javaweb.memshell.injector.resin.ResinListenerInjector;
|
||||||
import com.reajason.javaweb.memshell.injector.resin.ResinServletInjector;
|
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.asm.Advice;
|
||||||
import net.bytebuddy.implementation.bytecode.assign.Assigner;
|
|
||||||
|
|
||||||
import static com.reajason.javaweb.memshell.ShellType.*;
|
import static com.reajason.javaweb.memshell.ShellType.*;
|
||||||
|
|
||||||
@@ -14,7 +13,7 @@ import static com.reajason.javaweb.memshell.ShellType.*;
|
|||||||
* @author ReaJason
|
* @author ReaJason
|
||||||
* @since 2024/12/14
|
* @since 2024/12/14
|
||||||
*/
|
*/
|
||||||
public class ResinShell extends AbstractShell {
|
public class Resin extends AbstractServer {
|
||||||
|
|
||||||
public static class ListenerInterceptor {
|
public static class ListenerInterceptor {
|
||||||
@Advice.OnMethodExit
|
@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
|
* @author ReaJason
|
||||||
* @since 2024/12/24
|
* @since 2024/12/24
|
||||||
*/
|
*/
|
||||||
public class SpringWebFluxShell extends AbstractShell {
|
public class SpringWebFlux extends AbstractServer {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InjectorMapping getShellInjectorMapping() {
|
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