graaljs 적용

This commit is contained in:
Sungpil Hyun
2024-09-24 16:17:07 +09:00
parent 1610132270
commit a5845ccba3
2 changed files with 41 additions and 31 deletions
+5 -4
View File
@@ -1,5 +1,5 @@
plugins { plugins {
id 'org.springframework.boot' version '2.7.16' id 'org.springframework.boot' version '2.7.17'
id 'io.spring.dependency-management' version '1.1.3' id 'io.spring.dependency-management' version '1.1.3'
id 'java' id 'java'
// id "org.sonarqube" version "4.2.1.3168" // id "org.sonarqube" version "4.2.1.3168"
@@ -49,9 +49,10 @@ dependencies {
// implementation 'io.springfox:springfox-boot-starter:3.0.0' // implementation 'io.springfox:springfox-boot-starter:3.0.0'
implementation 'org.apache.httpcomponents:httpclient:4.5.14' implementation 'org.apache.httpcomponents:httpclient:4.5.14'
// implementation group: 'org.graalvm.js', name: 'js-scriptengine', version: '23.1.2'
// implementation group: 'org.graalvm.polyglot', name: 'polyglot', version: '23.1.2' implementation("org.graalvm.polyglot:polyglot:24.1.0")
// runtimeOnly group: 'org.graalvm.polyglot', name: 'js-community', version: '23.1.2', ext: 'pom' implementation("org.graalvm.polyglot:js:24.1.0")
implementation 'org.apache.commons:commons-lang3:3.12.0' implementation 'org.apache.commons:commons-lang3:3.12.0'
implementation 'org.apache.commons:commons-math3:3.6.1' implementation 'org.apache.commons:commons-math3:3.6.1'
@@ -17,10 +17,10 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CountDownLatch; import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import org.apache.commons.lang3.SerializationUtils; import org.apache.commons.lang3.SerializationUtils;
import org.graalvm.polyglot.Context;
import org.graalvm.polyglot.HostAccess;
import org.graalvm.polyglot.Value;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -193,35 +193,44 @@ public class VirtualUser implements Runnable {
} }
} }
private void executePreRequestScript(ApiRequestDTO apiRequest) { public void executePreRequestScript(ApiRequestDTO apiRequest) {
ScriptEngineManager manager = new ScriptEngineManager(); try (Context context = Context.newBuilder("js")
ScriptEngine engine = manager.getEngineByName("nashorn"); .allowHostAccess(HostAccess.ALL)
engine.put("console", new Console()); .allowHostClassLookup(className -> true)
engine.put("globals", globals); .build()) {
engine.put("variables", variables);
engine.put("request", apiRequest); Value bindings = context.getBindings("js");
try { bindings.putMember("console", new Console());
if(apiRequest.getPreRequestScript() != null) bindings.putMember("globals", globals);
engine.eval(apiRequest.getPreRequestScript()); bindings.putMember("variables", variables);
} catch (ScriptException e) { bindings.putMember("request", apiRequest);
logger.error("Error executing pre-request script", e);
if(apiRequest.getPreRequestScript() != null) {
context.eval("js", apiRequest.getPreRequestScript());
}
} catch (Exception e) {
logger.error("Error executing post-request script", e);
e.printStackTrace(); e.printStackTrace();
} }
} }
private void executePostRequestScript(ApiRequestDTO apiRequest, ApiResponse response) { public void executePostRequestScript(ApiRequestDTO apiRequest, ApiResponse response) {
ScriptEngineManager manager = new ScriptEngineManager(); try (Context context = Context.newBuilder("js")
ScriptEngine engine = manager.getEngineByName("nashorn"); .allowHostAccess(HostAccess.ALL)
engine.put("console", new Console()); .allowHostClassLookup(className -> true)
engine.put("globals", globals); .build()) {
engine.put("variables", variables);
engine.put("request", apiRequest); Value bindings = context.getBindings("js");
engine.put("response", response); bindings.putMember("console", new Console());
try { bindings.putMember("globals", globals);
if (apiRequest.getPostRequestScript() != null){ bindings.putMember("variables", variables);
engine.eval(apiRequest.getPostRequestScript()); bindings.putMember("request", apiRequest);
bindings.putMember("response", response);
if (apiRequest.getPostRequestScript() != null) {
context.eval("js", apiRequest.getPostRequestScript());
} }
} catch (ScriptException e) { } catch (Exception e) {
logger.error("Error executing post-request script", e); logger.error("Error executing post-request script", e);
e.printStackTrace(); e.printStackTrace();
} }