Java 如何使用ScriptEngineManager方法getEngineByName(“nashorn”)添加参数?
我将Nashorn与JavaAPI8一起使用。我想确保javascript执行的安全,以确保代码不能调用Java包 可能的情况如下:Java 如何使用ScriptEngineManager方法getEngineByName(“nashorn”)添加参数?,java,java-8,nashorn,scriptengine,Java,Java 8,Nashorn,Scriptengine,我将Nashorn与JavaAPI8一起使用。我想确保javascript执行的安全,以确保代码不能调用Java包 可能的情况如下: NashornScriptEngineFactory factory = new NashornScriptEngineFactory(); ScriptEngine engine = factory.getScriptEngine("-strict", "--no-java", "--no-syntax-extensions"); 但是,直接使用Nashorn
NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
ScriptEngine engine = factory.getScriptEngine("-strict", "--no-java", "--no-syntax-extensions");
但是,直接使用NashornScriptEngineFactory
并不是很好
最好的方法是使用ScriptEngineManager
。NashornScriptEngineFactory
是ScriptEngineManager
用来制作ScriptEngine
实例的工厂。这方面的解释如下:
这个包提供javax.script集成,它是
使用Nashorn的首选方式。您通常会这样做以获得
Nashorn脚本引擎的实例:
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引擎使用 另请参见:我将使用-Dnashorn.args=“-strict--no-java--no-syntax extensions”。我更喜欢继续使用java脚本api。即使有一天我改变了我使用的脚本语言,仅仅改变配置也比改变java代码更容易。谢谢你的帮助。