实现等效的Nashorn ClassFilter

时间:2019-04-12 21:16:56

标签: java java-8 nashorn

使用nashorn库jdk.nashorn.api.scripting.*可以实现ClassFilter接口,以禁止在以Java运行的javascript中实例化任何类:

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 bean被注入到调用程序中,该调用程序运行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 :(得分:0)

使用jdk.nashorn.api.scripting库,没有其他方法