javascript - 为什么可以从 JS-ScriptEngine eval(String) 执行 Java 代码?

标签 javascript java

像这样设置 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/

相关文章:

java - Android应用程序中使用循环解码QR码的方法

java - NullPointerException InAppBilling.IabHelper.launchPurchaseFlow(IabHelper.java :356)

JavaScript 对象 : access variable property by name as string

javascript - CSS3 和 JavaScript 打印区域

javascript - 如何使用分辨率相关的css文件?

java - 记事本程序中的复制按钮

Java:文本文件输入的 fseek()、ftell() 等价物?

javascript - CSS 对齐元素以适合所有屏幕

javascript - 如何使用 jquery 或 java 脚本访问父 div 和最接近该 div 的元素?

java - “App won' t 运行,除非您使用 Google Maps API 更新 Google Play 服务