我正在使用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:
这个包提供了javax.script集成,即 使用Nashorn的首选方式。你通常会这样做来获得一个 Nashorn脚本引擎的实例:
import javax.script.*; ... ScriptEngine nashornEngine = new ScriptEngineManager().getEngineByName("Nashorn");
我没有找到使用ScriptEngine
创建ScriptEngineManager
的解决方案,并且能够提供一些额外的参数,例如"-strict", "--no-java", "--no-syntax-extensions"
。
任何人都可以帮我解决这个问题吗?提前谢谢。
答案 0 :(得分:2)
嗯,javax.script是用于对任何脚本语言实现的通用API。按照设计,API根本不提供“引擎配置选项”!
使用Nashorn特定API的确切问题是什么?您是否认为您使用的是特定于引擎的API?但是,您正在使用特定于引擎的选项 - 其他引擎将不支持这些选项。所以,无论如何,你都与特定的引擎实现联系在一起。
还有另一种系统属性方法来指定Nashorn选项。您可以定义系统属性“nashorn.args”。此属性是进程范围的,因此将在Java进程中创建的所有Nashorn引擎使用。
另请参阅:https://wiki.openjdk.java.net/display/Nashorn/Nashorn+jsr223+engine+notes