像这样设置 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 不重复,因为我想知道为什么这是可能的,而不是如何避免它)
最佳答案
您必须停下来思考一下脚本引擎到底有什么用途。引用officicial documentation (这是有关该主题的推荐阅读内容):
With the Java Scripting API, it is possible to write customizable/extendable applications in the Java language and leave the customization scripting language choice to the end user
关键是您用 Java 编写大型旧应用程序,然后有另一方(可能是最终用户、使用您的“引擎/框架”的应用程序开发人员,或者如果您是企业级商店,则可以是专门的顾问)定制它以满足他们的需求。
此定制以非编译语言(即脚本)进行,例如 javascript (ECMAScript)。脚本引擎允许按照您的小测试脚本演示的方式与 Java 类进行交互。 毕竟,这种交互首先就是拥有脚本引擎的全部意义。
关于javascript - 为什么可以从 JS-ScriptEngine eval(String) 执行 Java 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34553949/