【发布时间】:2016-01-01 06:05:12
【问题描述】:
像这样设置 JavaScript-ScriptEngine 后:
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
public class Compute {
public static void main(String[] args){
try{
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
System.out.println(engine.eval(args[0]));
}
catch(Exception e){
System.out.println("Syntax Error!");
}
}
}
为什么你可以做这样的事情: java 计算 "java.util.Arrays.toString(new java.io.File(\".\").listFiles())"
“JavaScript”的 ScriptEngine 不应该只执行 JS 吗?
任何关于引擎实际做什么或为什么可能的链接,将不胜感激。
(编辑:这不是security problem with Java ScriptEngine 的重复,因为我想知道为什么这是可能的,而不是如何避免它)
【问题讨论】:
-
查看
ScriptEngineFactory::getMethodCallSyntax()方法,在我看来,这个想法是允许您构建动态脚本(在您的情况下为JavaScript)函数然后执行它们。我不会在那个答案上花钱,但这是我通过快速搜索找到的。甚至不知道你能做到这一点,但有道理。令人着迷! -
啊.. 所以 getMethodCallSyntax() 充当转换器,让我的 Java 代码适应 JS 可以执行的东西?
-
你想知道为什么提供这个功能或者它是如何实现的吗?
-
为什么提供它以及为什么官方文档告诉你这么少,是我最大的兴趣:)
标签: javascript java