我正在将 Nashorn 与 Java API 8 一起使用。我想保护 javascript 执行,以确保代码无法调用 Java 包。
可能如下:
NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
ScriptEngine engine = factory.getScriptEngine("-strict", "--no-java", "--no-syntax-extensions");
但是,直接使用 NashornScriptEngineFactory
并不是很好。
最好的方法是使用ScriptEngineManager
。 NashornScriptEngineFactory
是 ScriptEngineManager
用于创建 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/