CN114706662B - 基于jvm沙箱实现动态模拟业务操作和数据的方法及系统 - Google Patents
基于jvm沙箱实现动态模拟业务操作和数据的方法及系统 Download PDFInfo
- Publication number
- CN114706662B CN114706662B CN202210642350.2A CN202210642350A CN114706662B CN 114706662 B CN114706662 B CN 114706662B CN 202210642350 A CN202210642350 A CN 202210642350A CN 114706662 B CN114706662 B CN 114706662B
- Authority
- CN
- China
- Prior art keywords
- sandbox
- simulator
- jvm
- short message
- service
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/53—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45575—Starting, stopping, suspending or resuming virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45587—Isolation or security of virtual machine instances
Abstract
本发明公开了一种基于JVM沙箱实现动态模拟业务操作和数据的方法及系统,所述方法包括以下步骤:S1.使用http请求动态配置黑白名单,启动模拟器的同时配置参数bPhone,同时将配置的黑白名单存到redis中;S2.业务服务调用短信发送方法,模拟器通过JVM的classloader获取到batchcall的目标数据到沙箱中,同时从redis中获取黑白名单数据与监听到的参数数据进行处理;S3.根据配置的电话号码进行比较如果与营销活动中流入的电话号码一样就返回触达成功,如果不一样就返回短信发送失败执行业务流程;S4.业务服务从JVM中获取到模拟器返回器,通过返回值进行业务服务的后续操作。
Description
技术领域
本发明涉及计算机及数据处理技术领域,尤其是涉及一种基于JVM沙箱实现动态模拟业务操作和数据的方法及系统。
背景技术
JVM沙箱实现了一种在不重启、不侵入目标JVM应用的AOP解决方案,无需重启应用来尽可能动态打印日志、参数、配置。如图1所示,模拟内部服务/三方接口返回不同数据、测试开发对接并行,模拟测试数据和调用来测试MAP等需要实时数据的功能/场景、测试数开对接并行模拟性能测试中离开真实环境无法实现的调用失败、超时、延迟。模拟配置中心实时修改配置参数。本方案基于该模拟器实施动态模拟业务:模拟发送短信,模拟发送积分,模拟发送优惠券等,由此可测试某个即将推出的商业活动的设计是否存在各种问题,通过模拟的方法发现问题进行预处理和修正,避免影响到实际系统的运行。核心的功能点就是动态配置黑白名单模拟发送业务。
AOP(面向切面编程)技术已被业界广泛应用,其思想是面向业务处理过程的某个步骤或阶段进行编程,这个步骤或阶段被称为切面,其目的是降低业务逻辑的各部分之间的耦合。Spring AOP 方案的痛点在于不是所有业务代码都托管在 Spring 容器中,而且更底层的中间件代码、三方包代码无法纳入到回归测试范围,更糟糕的是测试框架会引入自身所依赖的类库,经常与业务代码的类库产生冲突,因此,JVM 沙箱应运而生。可以在不侵入的情况下对业务进行拦截修改。
发明内容
针对现有技术存在的问题,本发明的目的在于提供一种方法及系统,使用沙箱的方法,从而得到想要的返回值,在测试高并发的情况下忽略了发送短信这个动作的所花费的时间,从而优化原业务质量。通过模拟获取到营销活动并发情况下的压测能力,同时满足了在不影响客户的情况下,完成全流程测试。
为实现上述目的,本发明提供一种基于JVM沙箱实现动态模拟业务操作和数据的方法,所述方法包括以下步骤:
S1. 使用http请求配置参数bPhone黑白名单,启动模拟器时默认会载入配置的模块,同时将配置的黑白名单存到redis中;
S2.业务服务调用短信发送方法,模拟器通过JVM的classloader获取到batchcall的目标数据到沙箱中,同时从redis中获取黑白名单数据与监听到的参数数据进行处理;
S3.根据redis中获取的电话号码进行比较如果与目标业务营销活动中流入的电话号码一样就返回触达成功,如果不一样就返回短信发送失败执行业务流程。
S4.业务服务从JVM中获取到模拟器返回器,通过返回值进行业务服务的后续操作。
进一步,模块加载后不启动的情况下,不会进行任何拦截。
进一步,所述方法用于模拟实现营销活动,活动节点在大量人群进行活动并发触达而使用动态配置黑白名单做发送动作,在保证原有短信接口正常使用下,对短信接口进行拦截模拟。
进一步,在代码模块中配置需要拦截的类,方法来实现业务方法类的监听拦截;使用http请求动态配置黑百名单,该域名请求https://域名/simulator/模块名称/startbPhone=电话号码1&bPhone=电话号码N,启动模拟器的同时配置参数,根据配置的电话号码1至N进行模拟过滤执行业务流程。
进一步,编写模拟器模块启动入口,通过http请求和沙箱命令启动沙箱,在启动的时候载入模拟器模块,同时配置拦截目标类方法,模拟器模块加载完成之后,所有的基于模拟器模块的操作都可以在start方法回调中进行;启动沙箱后进行行为通知,再从目标应用类加载器获取数据再进行拷贝到沙箱中,从redis中获取黑白名单和目标应用类加载器获取的参数进行比较处理;其中,启动模拟器的具体过程在于:首先载入短信模拟器,启动入口通过commod接收到从sandbox.sh -d 发出的命令,行为监听器监听JVM中classLoader为目标方法的参数各个实现类从这边获取到目标参数,短信模拟实现类获取到目标参数,同时处理目标应用方法的返回参数,并将目标方法获取到模拟器返回参数,所述拦截目标类方法为batchCall方法。
进一步,当业务走到发送短信接口的时候模拟器开始监听方法,将监听到的方法参数深拷贝到沙箱中,同时从redis中获取黑白名单数据与监听到的是参数数据进行过滤,过滤改号码是否成功触达成功。
进一步,这个过程覆盖原业务的方法,使用沙箱的方法,从而得到想要的返回值,用于模拟短信发送成功,在测试高并发的情况下忽略了发送短信这个动作的所花费的时间,从而优化原业务质量。
进一步,步骤S2中,将获取到的动态参数存入到redis中,在启动的时候同时通过短信模拟监听器实现监听短信模拟器中定义的目标方法路径。
进一步,还包括部署模块,所述部署模块将沙箱打包放在业务服务器下,配置需要拦截的类,接入沙箱,沙箱根据配置的方法进行植入,根据需求来判断是走业务需求还是走沙箱的植入需求;在判断为走沙箱的植入需求的情况下,模拟器模块启动入口,实施动态模拟业务操作和数据。
另一方面,本发明一种基于JVM沙箱实现动态模拟业务操作和数据的系统,所述系统用于应用根据本发明所述的基于JVM沙箱实现动态模拟业务操作和数据的方法。
本发明的技术优势在于通过动态配置黑白名单将配置的名单保存到redis中,动态满足业务的成功触达或触达失败,同时可以通过http可以直接查看业务拦截的数据,相比于原技术可以直观的看到测试数据。通过动态配置不同的拦截方式,不同的代理方式,以代理的结果来展现不同的场景下模拟器拦截的方式。依次来对应不同业务需求,做到灵活配置不同的业务代理。
附图说明
图1示出了现有技术中根据JVM沙箱底层原理结构示意图;
图2示出了根据本发明实施例基于JVM沙箱实现动态模拟业务操作和数据的方法和系统的流程示意图;
图3示出了根据本发明实施例JVM沙箱执行过程的结构示意图。
具体实施方式
下面将结合附图,对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
以下结合图2和图3对本发明的JVM沙箱技术实现动态模拟业务操作和数据的方法和系统的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明,并不用于限制本发明。
Sandbox(沙箱)是指一种技术,在这种技术中,软件运行在操作系统受限制的环境中。在计算机安全领域,沙箱是一种用于安全的运行程序的机制。它常常用来执行那些非可信的程序。非可信程序中的恶意代码对系统的影响将会被限制在沙箱内而不会影响到系统的其它部分。沙箱技术按照一定的安全策略,通过严格限制非可信程序对系统资源的使用来实现隔离。
本发明的主要目的在于为了测试项目准确性、稳定性等而模拟实现营销活动,防止黑灰产利用活动漏洞薅羊毛而对商家造成经济损失。模拟活动节点在大量人群进行活动并发触达而使用动态配置黑白名单做发送动作。因为发送真实短信,优惠券等会对客户造成影响,而且还需考虑到服务器的稳定性(不能对服务进行重启)。因此在保证原有短信接口正常使用下,对该短信接口进行拦截模拟是有机器重要的意义。
本发明基于JVMTI来实现JVM字节码替换,并基于此进行一层抽象,实现对任意方法,执行前、执行后、异常时添加使用方想要做的一些动作。
其中,JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
JVMTI(Java Virtual Machine Tool Interface)即指 Java 虚拟机工具接口,它是一套由虚拟机直接提供的 native 接口,它处于整个 JPDA 体系的最底层,所有调试功能本质上都需要通过 JVMTI 来提供。通过这些接口,开发人员不仅调试在该虚拟机上运行的 Java 程序,还能查看它们运行的状态,设置回调函数,控制某些环境变量,从而优化程序性能。JVMTI 本质上是在 JVM 内部的许多事件进行了埋点。通过这些埋点可以给外部提供当前上下文的一些信息。甚至可以接受外部的命令来改变下一步的动作。外部程序一般利用C/C++实现一个JVMTIAgent,在Agent里面注册一些JVM事件的回调。当事件发生时JVMTI调用这些回调方法。Agent可以在回调方法里面实现自己的逻辑。JVMTIAgent是以动态链接库的形式被虚拟机加载的。
从大的方面来说,JVMTI 提供了可用于 debug 和 profiler 的接口;同时,在Java 5/6 中,虚拟机接口也增加了监听(Monitoring),线程分析(Thread analysis)以及覆盖率分析(Coverage Analysis)等功能。从小的方面来说包含了虚拟机中线程、内存、堆、栈、类、方法、变量,事件、定时器处理等等诸多功能。
通过这些接口,开发人员不仅可以调试在该虚拟机上运行的 Java 程序,还能查看它们运行的状态,设置回调函数,控制某些环境变量,从而优化程序性能。使用JVMTI所提供的接口方法在于:一般采用建立一个 Agent 的方式来使用 JVMTI,这个Agent的表现形式是一个以c/c++语言编写的动态链接库。
把 Agent 编译成一个动态链接库,Java启动或运行时,动态加载一个外部基于JVMTI 编写的dynamic module到Java进程内,然后触发 JVM源生线程Attach Listener来执行这个dynamic module的回调函数。
JVMTI在Java运行时,通过attach api动态载入,运行时载入,虚拟机会在运行时监听并接受 Agent 的加载。
JVM 沙箱可以被动态地挂载到某个正在运行的目标 JVM 进程之上,沙箱工作完之后还可以被动态地从目标 JVM 进程卸载掉,沙箱被卸载之后,沙箱对目标进程产生的影响会随即消失,所以说是是非侵入的隔离。JVM有自己的的业务代码,而这些代码挂载到目标代码上面,为了避免沙箱的代码和业务的代码冲突,通过自定义的SandboxClassLoader破坏了双亲委派模型的约定,调用URLClassLoader的findClass方法,打破了双亲委派模型,从自定义的路径中寻找类,实现了和目标应用的类隔离。所以加载沙箱不会引起应用的类污染、冲突。各模块之间类通过ModuleJarClassLoader实现了各自的独立,达到模块之间、模块和沙箱之间、模块和应用之间互不干扰。其中,双亲委派模型是指:classLoader加载类时,先从自身缓存中找有没有这个class,没有的话就交给父classLoader去加载,所有父classLoader加载不到的话,最终自己加载,自己加载不到的话就抛出ClassNotFoundException。加载成功之后放到自己的缓存中。
如图2所示,根据本发明的一种基于JVM沙箱实现动态模拟业务操作和数据的方法,包括以下步骤:
S1.使用http请求动态配置黑白名单,比如该域名请求https://域名/simulator/模块名称/start bPhone=1321****6000&bPhone=189****5678,启动模拟器的同时配置了参数bPhone,启动模拟器的同时将配置的黑白名单存到redis中。所述模拟器包括短信模拟器和积分模拟器。其中,redis是一个高性能的key-value数据库。
S2.当业务服务调用短信发送方法,短信模拟器通过JVM的classloader获取到batchcall的目标数据到沙箱中,同时从redis中获取黑白名单数据与监听到的目标参数数据进行处理;
S3.处理目标应用方法的返回参数,根据redis中获取的电话号码进行比较,如果与目标业务营销活动中流入的电话号码一样就返回触达成功,如果不一样就返回短信发送失败执行业务流程。
S4.业务服务从JVM中获取到模拟器返回器,通过返回值进行业务服务的后续操作。
积分模拟业务的流程与短信模拟业务的流程相同。
具体地,根据图2所示,通过http请求和沙箱命令启动沙箱,同时配置拦截目标类方法,启动沙箱后进行行为通知,再从目标应用类加载器获取数据再进行拷贝到沙箱中,从redis中获取黑白名单和目标应用类加载器获取的参数进行比较处理。其中,启动模拟器的具体过程如图3所示,首先载入短信模拟器,启动入口通过commod接收到从sandbox.sh -d发出的命令,行为监听器监听JVM中classLoader为目标方法(batchcall)的参数各个实现类从这边获取到目标参数,短信模拟实现类获取到目标参数,同时处理目标应用方法的返回参数,并将目标方法获取到模拟器返回参数。
部署模块将沙箱项目打包放在业务服务器下,配置需要拦截的类,方法比如batchCall来接入沙箱,沙箱会根据配置的方法模块加载,模块开始加载之前调用,可以根据业务定的需求来走业务需求还是走沙箱的模版需求。模拟器模块启动入口,行为方法拦截模型加载后不启动的话,不会进行任何拦截。
为了模拟实现营销活动,活动节点在大量人群进行活动并发触达而使用动态配置黑白名单做发送动作。因为发送真实短信,优惠券等会对客户造成影响,而且还需考虑到服务器的稳定性(不能对服务器进行重启)。因此在保证原有短信接口正常使用下,对该短信接口进行拦截模拟。
编写模拟器模块启动入口,通过事件监听开始拦截方法,动态参数存入到redis中,在启动的时候载入模拟器模块;通过配置以访问接口的方式查看模拟器模块状态、数据查看接口,启动状态、配置参数和统计信息;部署模块将沙箱项目打包放在业务服务器下,配置需要拦截的类,接入沙箱,沙箱根据配置的方法进行植入,根据需求来判断是走业务需求还是走沙箱的植入需求;在判断为走沙箱的植入需求的情况下,模拟器模块启动入口,实施动态模拟业务操作和数据。
步骤S1中,编写模拟器模块启动入口,编写的公共启动方法代码如下: @Command("start")
public void start(final Map<String, String[]> params){
if (null == redisClient) redisClient = new RedisClient(holder); // 配置参数
if (!params.isEmpty())
redisClient.putMap("config", params);
// 开始监听方法调用
models.stream().forEach(s -> { new EventWatchBuilder(moduleEventWatcher)
.onClass(s.getOnClass())
.onBehavior(s.getOnBehavior())
.onWatch(getListener(s));
// 设置启动状态
isStarted = true;
}
模拟器模块加载完成之后,所有的基于模拟器模块的操作都可以在这个start方法回调中进行。@command接收到从sandbox.sh -d 发出的命令,也就是获取自定义编写的参数(为JVM沙箱原技术)。
获取自定义参数,暂时设置为(bphone这边的参数是http请求的时候输入的)
protected booleanisMatched(String key, String value) {
Map<String, String[]> params = null;
try {
params = client.getMap("config");
} catch (Exception e) {
log.log(Level.SEVERE, "获取配置参数失败.", e);
}
if (null != params) {
String[] values = params.get(key);
if (null != values) {
return Stream.of(values).anyMatch(val ->val.equals(value));
}
}
return false;
}
步骤S2中,将获取到的动态参数存入到redis中,在启动的时候同时实现监听短信模拟器中定义的目标方法路径。这样做的好处就是通过配置就可以在不影响业务代码的情况下进行aop方式进行日志打印等操作。
实现短信模拟器的代码入下:
@Override
protected List<BaseModel>getModels() {
List<BaseModel> models = new ArrayList<>();
BaseModel model = new BaseModel();
model.setFunc(SMS_CALL);
// 监控短信调用方法
model.setOnClass("com.startdt.nuza.map.reach.channel.impl.SmsChannel");
model.setOnBehavior("batchCall");
models.add(model);
return models;
}
其次在短信模拟器模块中配置需要拦截的目标类,目标方法batchCall来实现业务方法类(batchCall)的监听拦截。
模块加载是模块生命周期的开始,在模块生命中期中有且只会调用一次。这里抛出异常将会是阻止模块被加载的唯一方式,如果模块判定加载失败,将会释放掉所有预申请的资源,模块也不会被沙箱所感知.
步骤S3中,行为监听主要是为了获取目标类数据
@Override
protected void before(Advice advice) throws Throwable {
appClassLoader = advice.getLoader();
int length = advice.getParameterArray().length;
Object[] pArray = new Object[length];
for (int i = 0; i< length; i++) {
// 从目标应用类拷贝参数
pArray[i] = getTransloader().wrap(
advice.getParameterArray()[i]).cloneWith(getClass().getClassLoader());
}
Object rtnObject = beforeProcess(pArray);
// 处理目标应用的返回值
Object wrapObj = getTransloader().wrap(rtnObject).cloneWith(appClassLoader);
ProcessController.returnImmediately(wrapObj);
}
步骤S4中,通过上述的before获取的参数将这些参数强转成目标业务数据类(为返回参数做准备),以及从redis中获取的bPhone(key)电话号码,通过匹配电话号码,返回不同的参数到目标业务。具体代码如下:
@Override
protected Object beforeProcess(Object[] params) {
RedisClient client = getClient();
if (SMS_CALL.equals(getModel().getFunc())) {
List<SMSTouchDataModel>smsModels = (List<SMSTouchDataModel>) (params[0]);
List<AbstractReachChannel.CallbackModel> list =(List<AbstractReachChannel.CallbackModel>)params[3];
for (int i = 0; i<smsModels.size(); i++) {
SMSTouchDataModelsmsModel = smsModels.get(i);
SMSInfo info = new SMSInfo(smsModel, true);
// 标识模拟器数据
smsModel.setTemplateContent("[SMS模拟器]" +smsModel.getTemplateContent());
// 匹配短信黑名单
log.info("smsModel:activity:" + info.activityId);
log.info("smsModel:nodeId:" + info.nodeId);
AbstractReachChannel.CallbackModelcallbackModel = list.get(i);
callbackModel.setChannelDataModel(smsModel);
// 匹配短信黑名单
if (isMatched("bPhone", smsModel.getPhone())) {
info.type = false;
callbackModel.setResult(false);
} else {
callbackModel.setResult(true);
}
storeCount(client, info);
}
}
return null;
}
此外,本发明还能够实现统计信息实现方法,其代码如下:
@Command("view")
public void view(final PrintWriter writer, final HttpServletResponseresp) throws Exception {
if (null == redisClient)
redisClient = new RedisClient(holder);
// 防止中文乱吗
resp.setHeader("Content-type", "text/html;charset=UTF-8");
resp.setCharacterEncoding("UTF-8");
writer.print("\n\n统计信息(statistics):\n");
String statKeys = redisClient.getString(STATISTICS_KEYS);
if (null != statKeys) {
// 需统计信息的key以","分割,注意key不要含有","
String[] keyArrays = statKeys.split(",");
Stream.of(keyArrays).forEach(k -> {
writer.print("->" + k + "\n");
try {
// 打印统计信息key对应的数据
writer.print("\t" + redisClient.getString(k) + "\n");
} catch (Exception e) {
log.severe(String.format("不能获取Key:%s, 异常:%s", k, e.getMessage()));
}
});
}
writer.print("</pre>");
统计方法入口主要统计目标应用类的触达成功、失败、黑白名单和模拟器状态。
这个过程覆盖原业务SmsChannel的batchcall方法,使用沙箱的方法,从而得到想要的返回值,用于模拟短信发送成功,在测试高并发的情况下忽略了发送短信这个动作的所花费的时间,从而优化原业务质量。通过模拟获取到营销活动并发情况下的压测能力。同时满足了在不影响客户的情况下,完成全流程测试。同时也可以在不覆盖原业务SmsChannel的batchcall方法的情况进行使用。
本发明通过动态配置黑白名单将配置的名单保存到redis中,动态满足业务的短信发送成功或者短信发送失败,同时可以通过http可以直接查看业务拦截的数据,相比于原技术可以直观的看到测试数据。本发明还提供一种基于JVM沙箱实现动态模拟业务操作和数据的系统,所述系统用于应用根据本发明所述的基于JVM沙箱实现动态模拟业务操作和数据的方法。
在本说明书的描述中,参考术语“实施例”、“示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。此外,本领域的技术人员可以在不产生矛盾的情况下,将本说明书中描述的不同实施例或示例以及其中的特征进行结合或组合。
上述内容虽然已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型等更新操作。
Claims (10)
1.基于JVM沙箱实现动态模拟业务操作和数据的方法,其特征在于,所述方法包括以下步骤:
S1.使用http请求配置参数bPhone黑白名单,启动模拟器时默认会载入配置的模块,同时将配置的黑白名单存到redis中;
S2.业务服务调用短信发送方法,模拟器通过JVM的classloader获取到batchcall的目标数据到沙箱中,同时从redis中获取黑白名单数据与监听到的参数数据进行处理;
S3. 处理目标应用方法的返回参数,根据redis中获取的电话号码进行比较,如果与目标业务营销活动中流入的电话号码一样就返回触达成功,如果不一样就返回短信发送失败执行业务流程;
S4.业务服务从JVM中获取到模拟器返回器,通过返回值进行业务服务的后续操作。
2.根据权利要求1所述的基于JVM沙箱实现动态模拟业务操作和数据的方法,其特征在于,模块加载后不启动的情况下,不会进行任何拦截,所述模拟器为短信模拟器或积分模拟器。
3.根据权利要求2所述的基于JVM沙箱实现动态模拟业务操作和数据的方法,其特征在于,所述方法用于模拟实现营销活动,活动节点在大量人群进行活动并发触达而使用动态配置黑白名单做发送动作,在保证原有短信接口正常使用下,对短信接口进行拦截模拟。
4.根据权利要求3所述的基于JVM沙箱实现动态模拟业务操作和数据的方法,其特征在于,在代码模块中配置需要拦截的类和拦截的方法来实现业务方法类的监听拦截;使用http请求动态配置黑百名单,该http请求https://域名/simulator/模块名称/startbPhone=电话号码1&bPhone=电话号码N,启动模拟器的同时配置参数,根据配置的电话号码1至N进行模拟过滤执行业务流程。
5.根据权利要求4所述的基于JVM沙箱实现动态模拟业务操作和数据的方法,其特征在于,编写模拟器模块启动入口,通过http请求和沙箱命令启动沙箱,在启动的时候载入模拟器模块,同时配置拦截目标类方法,模拟器模块加载完成之后,所有的基于模拟器模块的操作都可以在start方法回调中进行;启动沙箱后进行行为通知,再从目标应用类加载器获取数据再进行拷贝到沙箱中,从redis中获取黑白名单和目标应用类加载器获取的参数进行比较处理;其中,启动模拟器的具体过程在于:首先载入短信模拟器,启动入口通过commod接收到从sandbox.sh -d 发出的命令,行为监听器监听JVM中classLoader为目标方法的参数各个实现类从这边获取到目标参数,短信模拟实现类获取到目标参数,同时处理目标应用方法的返回参数,并将目标方法获取到模拟器返回参数,所述拦截目标类方法为batchCall方法。
6.根据权利要求5所述的基于JVM沙箱实现动态模拟业务操作和数据的方法,其特征在于,当业务走到发送短信接口的时候模拟器开始监听方法,将监听到的方法参数深拷贝到沙箱中,同时从redis中获取黑白名单数据与监听到的是参数数据进行过滤,过滤改号码是否成功触达成功。
7.根据权利要求6所述的基于JVM沙箱实现动态模拟业务操作和数据的方法,其特征在于,这个过程覆盖原业务的方法,使用沙箱的方法,从而得到想要的返回值,用于模拟短信发送成功,在测试高并发的情况下忽略了发送短信这个动作的所花费的时间,从而优化原业务质量。
8.根据权利要求7所述的基于JVM沙箱实现动态模拟业务操作和数据的方法,其特征在于,步骤S2中,将获取到的动态参数存入到redis中,在启动的时候同时通过短信模拟监听器实现监听短信模拟器中定义的目标方法路径。
9.根据权利要求8所述的基于JVM沙箱实现动态模拟业务操作和数据的方法,其特征在于,还包括部署模块,所述部署模块将沙箱打包放在业务服务器下,配置需要拦截的类,接入沙箱,沙箱根据配置的方法进行植入,根据需求来判断是走业务需求还是走沙箱的植入需求;在判断为走沙箱的植入需求的情况下,模拟器模块启动入口,实施动态模拟业务操作和数据。
10.基于JVM沙箱实现动态模拟业务操作和数据的系统,其特征在于,所述系统用于应用根据权利要求1-9任一项所述的基于JVM沙箱实现动态模拟业务操作和数据的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210642350.2A CN114706662B (zh) | 2022-06-08 | 2022-06-08 | 基于jvm沙箱实现动态模拟业务操作和数据的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210642350.2A CN114706662B (zh) | 2022-06-08 | 2022-06-08 | 基于jvm沙箱实现动态模拟业务操作和数据的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114706662A CN114706662A (zh) | 2022-07-05 |
CN114706662B true CN114706662B (zh) | 2022-09-02 |
Family
ID=82177994
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210642350.2A Active CN114706662B (zh) | 2022-06-08 | 2022-06-08 | 基于jvm沙箱实现动态模拟业务操作和数据的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114706662B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6931544B1 (en) * | 1998-12-18 | 2005-08-16 | The Sco Group, Inc. | Method and apparatus for executing multiple JAVA(™) applications on a single JAVA(™) virtual machine |
CN105427096A (zh) * | 2015-12-25 | 2016-03-23 | 北京奇虎科技有限公司 | 支付安全沙箱实现方法及系统与应用程序监控方法及系统 |
CN106776313A (zh) * | 2016-12-13 | 2017-05-31 | 广州唯品会信息科技有限公司 | 一种模拟服务的方法、装置及集中管理平台 |
CN112565274A (zh) * | 2020-12-11 | 2021-03-26 | 国家计算机网络与信息安全管理中心江苏分中心 | 一种智能识别恶意app的方法及系统 |
CN112835782A (zh) * | 2020-12-22 | 2021-05-25 | 北京健康之家科技有限公司 | 接口的接入测试方法和系统 |
CN113672907A (zh) * | 2021-07-29 | 2021-11-19 | 济南浪潮数据技术有限公司 | 基于JVM沙箱与黑白名单的Java安全防范方法、装置及介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104184774B (zh) * | 2013-05-24 | 2017-12-26 | 阿里巴巴集团控股有限公司 | 一种基于沙箱环境的信息处理方法和系统 |
US9223964B2 (en) * | 2013-12-05 | 2015-12-29 | Mcafee, Inc. | Detecting JAVA sandbox escaping attacks based on JAVA bytecode instrumentation and JAVA method hooking |
WO2021142720A1 (zh) * | 2020-01-16 | 2021-07-22 | 上海卓悠网络科技有限公司 | 一种在Android系统中提供沙盒环境保护用户隐私的方法 |
-
2022
- 2022-06-08 CN CN202210642350.2A patent/CN114706662B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6931544B1 (en) * | 1998-12-18 | 2005-08-16 | The Sco Group, Inc. | Method and apparatus for executing multiple JAVA(™) applications on a single JAVA(™) virtual machine |
CN105427096A (zh) * | 2015-12-25 | 2016-03-23 | 北京奇虎科技有限公司 | 支付安全沙箱实现方法及系统与应用程序监控方法及系统 |
CN106776313A (zh) * | 2016-12-13 | 2017-05-31 | 广州唯品会信息科技有限公司 | 一种模拟服务的方法、装置及集中管理平台 |
CN112565274A (zh) * | 2020-12-11 | 2021-03-26 | 国家计算机网络与信息安全管理中心江苏分中心 | 一种智能识别恶意app的方法及系统 |
CN112835782A (zh) * | 2020-12-22 | 2021-05-25 | 北京健康之家科技有限公司 | 接口的接入测试方法和系统 |
CN113672907A (zh) * | 2021-07-29 | 2021-11-19 | 济南浪潮数据技术有限公司 | 基于JVM沙箱与黑白名单的Java安全防范方法、装置及介质 |
Non-Patent Citations (2)
Title |
---|
"Musti: Dynamic Prevention of Invalid Object Initialization Attacks";Alexandre Bartel等;《IEEE Transactions on Information Forensics and Security 》;20190831;第14卷(第8期);第2167-2178页 * |
《JVM逃逸技术与JRE漏洞挖掘研究》;李骁;《中国优秀硕士学位论文全文数据库 信息科技辑》;20150615;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN114706662A (zh) | 2022-07-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10705811B2 (en) | Method and system for automated, static instrumentation for applications designed for execution in environments with restricted resources, like mobile devices or TV set top boxes | |
US10552610B1 (en) | Adaptive virtual machine snapshot update framework for malware behavioral analysis | |
US8893222B2 (en) | Security system and method for the android operating system | |
CN110795734B (zh) | 一种恶意移动应用检测方法 | |
US9009823B1 (en) | Framework for efficient security coverage of mobile software applications installed on mobile devices | |
US20070220492A1 (en) | Application verifier infrastructure and checks | |
EP3203406A1 (en) | Sensitive information security protection method and device | |
CN111880987A (zh) | 应用程序的动态监测方法、装置、存储介质以及电子装置 | |
US20060129880A1 (en) | Method and system for injecting faults into a software application | |
WO2005082117A2 (en) | Using kernel level simulation techniques to improve application program robustness | |
Riganelli et al. | Policy enforcement with proactive libraries | |
CN106066803B (zh) | 应用程序运行控制的方法及装置 | |
CN110175101B (zh) | 一种异常捕获方法、装置以及终端 | |
CN114978940A (zh) | 链路监控及告警方法、装置、计算机设备和存储介质 | |
CN111209122A (zh) | 接口调用方法、装置、电子设备及存储介质 | |
CN108958785B (zh) | 一种应用程序升级方法及装置 | |
Riganelli et al. | Controlling interactions with libraries in android apps through runtime enforcement | |
CN110162310B (zh) | 插件接口测试方法及装置、计算机设备及存储介质 | |
CN110781081B (zh) | 一种移动应用回调强制触发方法、系统及存储介质 | |
CN114706662B (zh) | 基于jvm沙箱实现动态模拟业务操作和数据的方法及系统 | |
CN113127329B (zh) | 脚本调试方法、装置及计算机存储介质 | |
Luo | Heap memory snapshot assisted program analysis for android permission specification | |
CN116956272A (zh) | 权限调用监控方法、装置及电子设备 | |
CN116501596A (zh) | 应用程序的测试方法及装置 | |
CN113791790A (zh) | 一种应用程序更新方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |