使用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();
}
}
答案 0 :(得分:0)
使用jdk.nashorn.api.scripting
库,没有其他方法