java - 如何使用 ScriptEngineManager 方法 getEngineByName ("nashorn")添加参数?

标签 java java-8 nashorn scriptengine

我正在将 Nashorn 与 Java API 8 一起使用。我想保护 javascript 执行,以确保代码无法调用 Java 包。

可能如下:

NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
ScriptEngine engine = factory.getScriptEngine("-strict", "--no-java", "--no-syntax-extensions");

但是,直接使用 NashornScriptEngineFactory 并不是很好。

最好的方法是使用ScriptEngineManagerNashornScriptEngineFactoryScriptEngineManager 用于创建 ScriptEngine 实例的工厂。对此有解释documentation :

This package provides the javax.script integration, which is the preferred way to use Nashorn. You will ordinarily do this to obtain an instance of a Nashorn script engine:

import javax.script.*;
...
ScriptEngine nashornEngine = new ScriptEngineManager().getEngineByName("Nashorn");

我没有找到使用 ScriptEngineManager 创建 ScriptEngine 的解决方案,并且能够提供一些额外的参数,例如 "-strict", "--no -java", "--no-syntax-extensions".

有人可以帮我解决这个问题吗?预先感谢您。

最佳答案

嗯,javax.script 是可用于任何脚本语言实现的通用 API。按照设计,API 根本不提供“引擎配置选项”!

使用 Nashorn 特定 API 的确切问题是什么?您觉得您正在使用特定于引擎的 API 吗?但随后您将使用特定于引擎的选项 - 其他引擎将不支持该选项。因此,无论如何,您都与特定的引擎实现相关联。

还有另一种系统属性方法可以指定 Nashorn 选项。您可以定义系统属性“nashorn.args”。此属性是进程范围的,因此将由 Java 进程中创建的所有 Nashorn 引擎使用。

另请参阅:https://wiki.openjdk.java.net/display/Nashorn/Nashorn+jsr223+engine+notes

关于java - 如何使用 ScriptEngineManager 方法 getEngineByName ("nashorn")添加参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39657103/

相关文章:

java - 高负载项目中的Java OOM

java - 与Java 8并行流相比,Spring Batch的任何性能改进均可以处理大量数据

java-8 - java方法引用中的ContainingType是什么意思

java - 在 Java 应用程序示例中嵌入 Avatar JS

java - 使用 Camel 提取文件名中的值

java - Spring MVC session 属性

spring-mvc - 如何在 Spring @RestController 中将 Optional<T> 作为 JSON 返回?

java - 从 Nashorn 获取扩展 Java 类

javascript - Maximo JS 自动化脚本 : "importPackage" is not defined

java - Android 拍照在 Android 4.1.1 版本失败但在 4.0.0 版本成功