javascript - 如何将 Javascript native 类型从 Java 传递给 Nashorn 对象?

标签 javascript java-8 nashorn

出于安全原因,我想传递给 Nashorn 原生 Java 类型中的 JS 函数。

如果我创建一个引擎并运行以下命令:

        NashornScriptEngineFactory nashornScriptEngineFactory = new      NashornScriptEngineFactory();
        ScriptEngine engine = nashornScriptEngineFactory.getScriptEngine();
        engine.eval(script);
        Invocable invocable = (Invocable) engine;
        JSObject objectWork = (JSObject) engine.get("objectWork");
        objectWork.call(null,"eee");

脚本是

function objectWork(arg){
   print ("arg is "+ typeof arg);
   print ("arg.getClass()"+ arg.getClass());

   for (var k in arg){
        print(k);
   }
}

输出为

arg is string
arg.getClass()class java.lang.String

我对第二个不太满意,我不知道 getClass 是否公开了 java.lang.Class 对象的任何方法。有没有一种方法可以传递将 Java 字符串包装在扩展 Nashorn 自己的 JSObject 的 native 字符串中的内容?

最佳答案

JS String 原始类型值是 java.lang.String 对象。例如,

jjs> "hello".getClass()
class java.lang.String
jjs> "hello".class
class java.lang.String

即,nashorn 中没有使用单独的“JS String”类型。 Nashorn 尝试尽可能避免包装 Java/JS 类型。

您担心的具体问题是什么?通过“Class”对象反射访问字符串?请注意,默认情况下,如果您在 SecurityManager 下运行,则不允许对脚本进行 Java 反射。

$ jjs -J-Djava.security.manager
jjs> "hello".class
class java.lang.String
jjs> "hello".class.getMethods()
java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "nashorn.JavaReflection")
jjs>

因此,除非您向脚本授予“nashorn.JavaReflection”RuntimePermission,否则它将无法从脚本执行任何 Java 反射。因此,访问任何 Java 对象的 Class 对象不会造成任何安全线程。

关于javascript - 如何将 Javascript native 类型从 Java 传递给 Nashorn 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32797456/

相关文章:

javascript - 如何使用 Nashorn 从 Java 方法返回真正的 JavaScript 数组?

javascript - 第一个文件类型预览图像显示在第二个文件类型上

javascript - JSON 和 jQuery

javascript - LocalStorage 每页而不是(子)域?

java - 如何将 🎌 Japanese Era Date 字符串值解析为 LocalDate 和 LocalDateTime

javascript - Rhino 到 Nashorn - 添加可用于范围的属性/bean

javascript - Google ReCaptcha 未捕获的 DOMException : Blocked a frame with origin "https://www.google.com"

Java 8 可选。为什么是 of 和 ofNullable?

java - 从相应索引处的元素的数组创建列表

Java Nashorn 兼容性文件崩溃