java - 实现 Nashorn ClassFilter 等价物
问题描述
使用 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 8javax.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();
}
}
解决方案
使用jdk.nashorn.api.scripting
图书馆,别无他法
推荐阅读
- java - Spring boot Oauth2 Facebook 登录 - JSON 解析错误:无法从 START_OBJECT 令牌中反序列化 `java.lang.String` 的实例
- javascript - 在 Enzyme 描述函数中在哪里挂载和卸载?
- arduino - 如何编写代码使 LED 按以下顺序闪烁?
- c - 什么是 TASK_ACTION_COM_HANDLER 以及如何使用它?
- google-cloud-platform - 将 RStudio 安装到 GCP 集群时出现问题
- python - 无法使用 sklearn 重现训练和测试的拆分
- php - 在 Laravel 中获取文件上传字段名称
- javascript - 使用 d3.js 在世界地图上绘制位置
- javascript - 如何通过 webpack 使用 reactstrap
- python - 在创建 R 包时将 python 放入 R