Реализация Nashorn ClassFilter эквивалент - PullRequest
4 голосов
/ 13 апреля 2019

Используя библиотеку nashorn jdk.nashorn.api.scripting.*, можно реализовать интерфейс ClassFilter, чтобы отключить создание экземпляров любого класса из javascript, запускаемого в Java:

private static class NoJavaFilter implements ClassFilter {

    @Override
    public boolean exposeToScripts(String s) {
        return false;
    }
}

Это работает, когда вы запускаете движок следующим образом:

NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
ScriptEngine nashorn = factory.getScriptEngine(new NoJavaFilter());

Но я использую встроенную библиотеку Java 8 javax.script:

    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName("nashorn");

У которой нет ClassFilter, есть мысли, как реализовать эквивалент?

ОБНОВЛЕНИЕ

Этот код выполняется в контейнере Wildfly 14 EJB.Бин JsUtils внедряется в invoker, который запускает метод run, отправляющий скрипт в качестве параметра.

@Stateless
public class JsUtils {

    public String run(String script) throws ScriptException,
                                            NoSuchMethodException {     

        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("nashorn");                  
        Object result = engine.eval(script);
        return result.toString();
    }
}

1 Ответ

0 голосов
/ 17 июня 2019

Используйте библиотеку jdk.nashorn.api.scripting, другого пути нет

...