一、编写一个简单的加法接口
二、使用工具验证
将上面的接口打包,并验证。
三、编写module
3.1 创建一个maven工程
在pom.xml添加parent:
1 <parent> 2 <groupId>com.alibaba.jvm.sandbox</groupId> 3 <artifactId>sandbox-module-starter</artifactId> 4 <version>1.3.1</version> 5 </parent>
添加module class, 将sum的返回值,固定为50
1 package org.module; 2 3 import com.alibaba.jvm.sandbox.api.Information; 4 import com.alibaba.jvm.sandbox.api.Module; 5 import com.alibaba.jvm.sandbox.api.ProcessController; 6 import com.alibaba.jvm.sandbox.api.annotation.Command; 7 import com.alibaba.jvm.sandbox.api.listener.ext.Advice; 8 import com.alibaba.jvm.sandbox.api.listener.ext.AdviceListener; 9 import com.alibaba.jvm.sandbox.api.listener.ext.EventWatchBuilder; 10 import com.alibaba.jvm.sandbox.api.resource.ModuleEventWatcher; 11 import org.kohsuke.MetaInfServices; 12 13 import javax.annotation.Resource; 14 15 @MetaInfServices(Module.class) 16 @Information(id = "sumModule") 17 public class SumModule implements Module { 18 @Resource 19 private ModuleEventWatcher moduleEventWatcher; 20 21 @Command("changeSum") 22 public void changeSum() { 23 new EventWatchBuilder(moduleEventWatcher) 24 .onClass("mock.impl.SandBoxImpl") 25 .onBehavior("sum") 26 .onWatch(new AdviceListener() { 27 28 @Override 29 protected void afterReturning(Advice advice) throws Throwable { 30 ProcessController.returnImmediately(50); 31 } 32 }); 33 34 } 35 }
使用 mvn clean package 打包。生成jvmsandboxmodule-1.0-SNAPSHOT.jar
四、安装jvm-sandbox
1.下载最新的sandbox:https://ompc.oss.aliyuncs.com/jvm-sandbox/release/sandbox-stable-bin.zip
2. 将其放入和应用相同的服务器上,使用命令unzip sandbox-stable-bin.zip解压
3. 进入解压后的目录,使用命令./install-local.sh -p /home/mock/sandboxinstall 安装。其中/home/mock/sandboxinstall是安装目录
五、使用
5.1 将jvmsandboxmodule-1.0-SNAPSHOT.jar 拷贝到/home/mock/sandboxinstall/sandbox/sandbox-module下
5.2 获取应用(第一节中的加法接口)的PID,假设是4274
5.3 进入/home/mock/sandboxinstall/sandbox/bin,使用sandbox.sh 进行操作
5.4 使用命令植入目标JVM
./sandbox.sh -p 4274
5.5 查看当前modules
./sandbox.sh -p 4274 -l
5.6 启用changeSum
./sandbox.sh -p 4274 -d sumModule/changeSum
使用工具验证,发现结果变成50,不再是30
5.7 关闭
/sandbox.sh -p 4274 -S
使用工具验证,发现结果恢复成30