关于java:如何使用ScriptEngineManager方法getEngineByName(” nashorn”)添加参数?

How to add arguments with the ScriptEngineManager method getEngineByName(“nashorn”)?

我正在将Nashorn与Java API 8配合使用。我想确保javascript执行的安全性,以确保代码不会调用Java包。

可能如下:

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

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

好的方法是使用ScriptEngineManagerNashornScriptEngineFactoryScriptEngineManager用于制作ScriptEngine实例的工厂。在本文档中对此进行了解释:

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:

1
2
3
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引擎说明