Skip to content

Commit a0691cb

Browse files
committed
refactor: simplify server options
1 parent eaedbc5 commit a0691cb

File tree

21 files changed

+133
-485
lines changed

21 files changed

+133
-485
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.reajason.javaweb;
2+
3+
/**
4+
* @author ReaJason
5+
* @since 2025/7/21
6+
*/
7+
public class GenerationException extends RuntimeException {
8+
public GenerationException(String message) {
9+
super(message);
10+
}
11+
12+
public GenerationException(String message, Throwable cause) {
13+
super(message, cause);
14+
}
15+
}

generator/src/main/java/com/reajason/javaweb/memshell/Server.java

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,14 @@ public enum Server {
2727
*/
2828
Jetty(new JettyShell()),
2929
/**
30-
* JBoss AS 中间件,JBoss 6.4-EAP 也使用的当前方式 <a href="https://jbossas.jboss.org/downloads">JBoss AS</a>
30+
* JBoss 中间件,JBoss 6.4-EAP 也使用的当前方式 <a href="https://jbossas.jboss.org/downloads">JBoss AS</a>
3131
*/
32-
JBossAS(new JbossShell()),
33-
JBossEAP6(new JbossShell()),
32+
JBoss(new JbossShell()),
3433
/**
35-
* Undertow,对应是 Wildfly 以及 JBoss EAP,也有可能是 SpringBoot 用的
34+
* Undertow,对应是 Wildfly 以及 JBossEAP7,也有可能是 SpringBoot 用的
3635
* <a href="https://developers.redhat.com/products/eap/download">JBossEAP</a>
3736
*/
3837
Undertow(new UndertowShell()),
39-
JBossEAP7(new UndertowShell()),
40-
WildFly(new UndertowShell()),
4138

4239
/**
4340
* SpringMVC 框架
@@ -68,25 +65,21 @@ public enum Server {
6865
* GlassFish 中间件
6966
*/
7067
GlassFish(new GlassFishShell()),
71-
Payara(new GlassFishShell()),
7268

7369
/**
74-
* 宝兰德中间件
70+
* 宝兰德中间件,9.5.2+ 企业版
7571
*/
7672
BES(new BesShell()),
7773

7874
/**
7975
* 东方通中间件
8076
*/
81-
TongWeb6(new TongWeb6Shell()),
82-
TongWeb7(new TongWeb7Shell()),
83-
TongWeb8(new TongWeb8Shell()),
77+
TongWeb(new TongWebShell()),
8478

8579
/**
86-
* 金蝶天燕中间件
80+
* 金蝶天燕中间件,only 9
8781
*/
88-
Apusic9(new ApusicShell()),
89-
Apusic10(new GlassFishShell()),
82+
Apusic(new ApusicShell()),
9083

9184
/**
9285
* 中创中间件

generator/src/main/java/com/reajason/javaweb/memshell/config/ShellConfig.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
import com.reajason.javaweb.memshell.Server;
44
import com.reajason.javaweb.memshell.ShellTool;
5+
import com.reajason.javaweb.memshell.ShellType;
56
import lombok.AllArgsConstructor;
67
import lombok.Builder;
78
import lombok.Data;
89
import lombok.NoArgsConstructor;
910
import net.bytebuddy.jar.asm.Opcodes;
10-
import org.apache.commons.lang3.StringUtils;
1111

1212
/**
1313
* @author ReaJason
@@ -21,17 +21,22 @@ public class ShellConfig {
2121
/**
2222
* 目标服务类型
2323
*/
24-
Server server;
24+
private Server server;
25+
26+
/**
27+
* 目标服务版本
28+
*/
29+
private String serverVersion;
2530

2631
/**
2732
* 内存马功能
2833
*/
29-
ShellTool shellTool;
34+
private ShellTool shellTool;
3035

3136
/**
3237
* 内存马类型
3338
*/
34-
String shellType;
39+
private String shellType;
3540

3641
/**
3742
* 生成类的目标 JRE 版本
@@ -63,7 +68,7 @@ public boolean isDebugOff() {
6368

6469

6570
public boolean isJakarta() {
66-
return StringUtils.containsIgnoreCase(shellType, "jakarta");
71+
return shellType.startsWith(ShellType.JAKARTA);
6772
}
6873

6974
public boolean needByPassJavaModule() {

generator/src/main/java/com/reajason/javaweb/memshell/generator/ByteBuddyShellGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public byte[] getBytes() {
4343
}
4444

4545
if (ShellType.VALVE.equals(shellType) || ShellType.JAKARTA_VALVE.equals(shellType)) {
46-
builder = ValveGenerator.build(builder, shell);
46+
builder = ValveGenerator.build(builder, shell, shellConfig.getServerVersion());
4747
}
4848

4949
if (shellConfig.isJakarta()) {

generator/src/main/java/com/reajason/javaweb/memshell/generator/ValveGenerator.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.reajason.javaweb.memshell.generator;
22

3-
import com.reajason.javaweb.memshell.server.*;
3+
import com.reajason.javaweb.GenerationException;
4+
import com.reajason.javaweb.memshell.server.AbstractShell;
5+
import com.reajason.javaweb.memshell.server.BesShell;
6+
import com.reajason.javaweb.memshell.server.TongWebShell;
47
import net.bytebuddy.asm.AsmVisitorWrapper;
58
import net.bytebuddy.description.field.FieldDescription;
69
import net.bytebuddy.description.field.FieldList;
@@ -27,18 +30,21 @@ public class ValveGenerator {
2730
public static final String TONGWEB7_VALVE_PACKAGE = "com.tongweb.catalina";
2831
public static final String TONGWEB8_VALVE_PACKAGE = "com.tongweb.server";
2932

30-
public static DynamicType.Builder<?> build(DynamicType.Builder<?> builder, AbstractShell shell) {
33+
public static DynamicType.Builder<?> build(DynamicType.Builder<?> builder, AbstractShell shell, String serverVersion) {
3134
String packageName = null;
32-
if (shell instanceof TongWeb6Shell) {
35+
if (serverVersion.equals("6")) {
3336
packageName = TONGWEB6_VALVE_PACKAGE;
34-
} else if (shell instanceof TongWeb7Shell) {
37+
} else if (serverVersion.equals("7")) {
3538
packageName = TONGWEB7_VALVE_PACKAGE;
36-
} else if (shell instanceof TongWeb8Shell) {
39+
} else if (serverVersion.equals("8")) {
3740
packageName = TONGWEB8_VALVE_PACKAGE;
3841
} else if (shell instanceof BesShell) {
3942
packageName = BES_VALVE_PACKAGE;
4043
}
4144
if (StringUtils.isEmpty(packageName)) {
45+
if (shell instanceof TongWebShell) {
46+
throw new GenerationException("serverVersion is needed for TongWeb valve shell, please use 6/7/8 for shellConfig.serverVersion");
47+
}
4248
return builder;
4349
}
4450
return builder.visit(new ValveRenameVisitorWrapper(packageName));

generator/src/main/java/com/reajason/javaweb/memshell/server/JbossShell.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@
22

33
import com.reajason.javaweb.memshell.injector.glassfish.GlassFishContextValveAgentInjector;
44
import com.reajason.javaweb.memshell.injector.glassfish.GlassFishFilterChainAgentInjector;
5-
import com.reajason.javaweb.memshell.injector.jboss.JbossProxyValveInjector;
6-
import com.reajason.javaweb.memshell.injector.jboss.JbossValveInjector;
7-
import com.reajason.javaweb.memshell.injector.tomcat.TomcatContextValveAgentInjector;
8-
import com.reajason.javaweb.memshell.injector.tomcat.TomcatFilterChainAgentInjector;
5+
import com.reajason.javaweb.memshell.injector.glassfish.GlassFishValveInjector;
96
import com.reajason.javaweb.memshell.injector.tomcat.TomcatFilterInjector;
107
import com.reajason.javaweb.memshell.injector.tomcat.TomcatListenerInjector;
8+
import com.reajason.javaweb.memshell.injector.tomcat.TomcatProxyValveInjector;
119

1210
import static com.reajason.javaweb.memshell.ShellType.*;
1311

@@ -27,8 +25,8 @@ public InjectorMapping getShellInjectorMapping() {
2725
return InjectorMapping.builder()
2826
.addInjector(LISTENER, TomcatListenerInjector.class)
2927
.addInjector(FILTER, TomcatFilterInjector.class)
30-
.addInjector(VALVE, JbossValveInjector.class)
31-
.addInjector(PROXY_VALVE, JbossProxyValveInjector.class)
28+
.addInjector(VALVE, GlassFishValveInjector.class)
29+
.addInjector(PROXY_VALVE, TomcatProxyValveInjector.class)
3230
.addInjector(AGENT_FILTER_CHAIN, GlassFishFilterChainAgentInjector.class)
3331
.addInjector(CATALINA_AGENT_CONTEXT_VALVE, GlassFishContextValveAgentInjector.class)
3432
.build();

generator/src/main/java/com/reajason/javaweb/memshell/server/TongWeb7Shell.java

Lines changed: 0 additions & 31 deletions
This file was deleted.

generator/src/main/java/com/reajason/javaweb/memshell/server/TongWeb8Shell.java

Lines changed: 0 additions & 31 deletions
This file was deleted.

generator/src/main/java/com/reajason/javaweb/memshell/server/TongWeb6Shell.java renamed to generator/src/main/java/com/reajason/javaweb/memshell/server/TongWebShell.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* @author ReaJason
99
* @since 2024/12/26
1010
*/
11-
public class TongWeb6Shell extends AbstractShell {
11+
public class TongWebShell extends AbstractShell {
1212

1313
@Override
1414
public Class<?> getListenerInterceptor() {
@@ -19,11 +19,8 @@ public Class<?> getListenerInterceptor() {
1919
public InjectorMapping getShellInjectorMapping() {
2020
return InjectorMapping.builder()
2121
.addInjector(LISTENER, TongWebListenerInjector.class)
22-
.addInjector(JAKARTA_LISTENER, TongWebListenerInjector.class)
2322
.addInjector(FILTER, TongWebFilterInjector.class)
24-
.addInjector(JAKARTA_FILTER, TongWebFilterInjector.class)
2523
.addInjector(VALVE, TongWebValveInjector.class)
26-
.addInjector(JAKARTA_VALVE, TongWebValveInjector.class)
2724
.addInjector(AGENT_FILTER_CHAIN, TongWebFilterChainAgentInjector.class)
2825
.addInjector(CATALINA_AGENT_CONTEXT_VALVE, TongWebContextValveAgentInjector.class)
2926
.build();

generator/src/main/java/com/reajason/javaweb/memshell/utils/CommonUtil.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,6 @@ public static String generateShellClassName(Server server, String shellType) {
110110
packageName = "org.eclipse.jetty.servlet.handlers";
111111
break;
112112
case Undertow:
113-
case JBossEAP7:
114-
case WildFly:
115113
packageName = "io.undertow.servlet.handlers";
116114
break;
117115
case SpringWebMvc:

0 commit comments

Comments
 (0)