fix: custom shell classname use itself

This commit is contained in:
ReaJason
2025-11-20 00:36:25 +08:00
parent c495ef46a4
commit 798e447ab6
3 changed files with 12 additions and 10 deletions
@@ -24,15 +24,6 @@ public class MemShellGenerator {
if (server == null) {
throw new GenerationException("Unsupported server: " + serverName);
}
if (StringUtils.isBlank(shellToolConfig.getShellClassName())) {
shellToolConfig.setShellClassName(CommonUtil.generateShellClassName(serverName, shellConfig.getShellType()));
}
if (StringUtils.isBlank(injectorConfig.getInjectorClassName())) {
injectorConfig.setInjectorClassName(CommonUtil.generateInjectorClassName());
}
Class<?> injectorClass = null;
if (ShellTool.Custom.equals(shellConfig.getShellTool())) {
@@ -45,6 +36,13 @@ public class MemShellGenerator {
Class<?> shellClass = shellInjectorPair.getLeft();
injectorClass = shellInjectorPair.getRight();
shellToolConfig.setShellClass(shellClass);
if (StringUtils.isBlank(shellToolConfig.getShellClassName())) {
shellToolConfig.setShellClassName(CommonUtil.generateShellClassName(serverName, shellConfig.getShellType()));
}
}
if (StringUtils.isBlank(injectorConfig.getInjectorClassName())) {
injectorConfig.setInjectorClassName(CommonUtil.generateInjectorClassName());
}
byte[] shellBytes = ShellToolFactory.generateBytes(shellConfig, shellToolConfig);
@@ -31,8 +31,8 @@ public abstract class ByteBuddyShellGenerator<T extends ShellToolConfig> impleme
@Override
public byte[] getBytes() {
String shellClassName = shellToolConfig.getShellClassName();
DynamicType.Builder<?> builder = getBuilder();
String shellClassName = shellToolConfig.getShellClassName();
Class<?> shellClass = shellToolConfig.getShellClass();
if (shellClass != null) {
shellToolConfig.setShellTypeDescription(TypeDescription.ForLoadedType.of(shellClass));
@@ -8,6 +8,7 @@ import net.bytebuddy.dynamic.ClassFileLocator;
import net.bytebuddy.dynamic.DynamicType;
import net.bytebuddy.jar.asm.ClassReader;
import net.bytebuddy.pool.TypePool;
import org.apache.commons.lang3.StringUtils;
import java.util.Base64;
@@ -27,6 +28,9 @@ public class CustomShellGenerator extends ByteBuddyShellGenerator<CustomConfig>
byte[] classBytes = Base64.getDecoder().decode(shellClassBase64);
ClassReader classReader = new ClassReader(classBytes);
String className = classReader.getClassName().replace('/', '.');
if (StringUtils.isBlank(shellToolConfig.getShellClassName())) {
shellToolConfig.setShellClassName(className);
}
ClassFileLocator classFileLocator = ClassFileLocator.Simple.of(className, classBytes);
TypeDescription typeDescription = new TypePool.Default(
new TypePool.CacheProvider.Simple(), classFileLocator,