Как добавить аргументы с помощью метода ScriptEngineManager getEngineByName(nashorn)?

Я использую 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. Это объясняется в этом документация :

Этот пакет обеспечивает интеграцию с javax.script, что является предпочтительным способом использования Nashorn. Обычно это делается для получения экземпляра скриптового движка Nashorn:

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

Я не нашел решения для создания ScriptEngine с использованием ScriptEngineManager с возможностью указания дополнительных аргументов, таких как "-strict", "--no-java", "--no-syntax-extensions".

может ли кто-нибудь помочь мне в этом вопросе? Заранее спасибо.


person Thomas Betous    schedule 23.09.2016    source источник


Ответы (1)


Что ж, javax.script — это универсальный API, который можно использовать против любой реализации языка сценариев. Как и было задумано, API вообще не предусматривает «параметров конфигурации двигателя»!

В чем проблема с использованием API, специфичного для Nashorn? Вы чувствуете, что используете специфичный для движка API? Но тогда вы используете специальные параметры движка, которые не будут поддерживаться другими движками. Итак, вы в любом случае привязаны к конкретной реализации движка.

Существует еще один системный способ указания параметров Nashorn. Вы можете определить системное свойство «nashorn.args». Это свойство распространяется на весь процесс и поэтому будет использоваться всеми механизмами Nashorn, созданными в вашем процессе Java.

См. также: https://wiki.openjdk.java.net/display/Nashorn/Nashorn/Nashorn+jsr223+engine+notes

person A. Sundararajan    schedule 26.09.2016
comment
Я буду использовать -Dnashorn.args=-strict --no-java --no-syntax-extensions. Я предпочитаю продолжать использовать java script api. Даже если однажды я изменю язык сценария, который использую, будет проще изменить только конфигурацию, чем изменить код Java. Спасибо за вашу помощь. - person Thomas Betous; 26.09.2016