实现 Nashorn ClassFilter 等价物
Implementing Nashorn ClassFilter equivalent
使用 nashorn 库 jdk.nashorn.api.scripting.*
可以实现 ClassFilter
接口来禁止在 javascript 运行 in [=33] 中实例化任何 class =]:
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 被注入到调用程序中,运行s 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();
}
}
使用jdk.nashorn.api.scripting
库,没有别的办法
使用 nashorn 库 jdk.nashorn.api.scripting.*
可以实现 ClassFilter
接口来禁止在 javascript 运行 in [=33] 中实例化任何 class =]:
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 被注入到调用程序中,运行s 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();
}
}
使用jdk.nashorn.api.scripting
库,没有别的办法