为什么可以从JS ScriptEngine eval(String)执行Java代码
Why can you execute Java-Code from a JS-ScriptEngine eval(String)?
设置这样的JavaScript脚本引擎后:
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吗?
任何关于引擎实际功能或为什么这是可能的链接,都将不胜感激。
(编辑:这与Java ScriptEngine的安全问题没有重复,因为我想知道为什么这是可能的,而不是如何避免它)
您必须停下来思考一下脚本引擎到底是用来做什么的。引用官方文档(建议阅读该主题):
使用Java Scripting API,可以编写Java语言的可定制/可扩展应用程序最终用户的定制脚本语言选择
关键是你用Java编写你的大型旧应用程序,然后让另一方(可能是最终用户、使用你的"引擎/框架"的应用程序开发人员,或者如果你是企业级商店,则是专门的顾问)定制它以满足他们的需求。
这种自定义是在非编译语言(即脚本)中进行的,如javascript(ECMAScript)。脚本引擎允许与Java类的交互,就像您的小测试脚本所展示的那样毕竟,这种交互首先就是拥有脚本引擎的全部意义。
相关文章:
- 无法在通过jQuery的ajax加载的页面中执行javascript
- JavaScript执行暂时挂起页面
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 当js函数's已执行
- 哪个先执行
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- HTML表单提交时未执行外部函数
- 在Safari执行javascript之前对其进行修改
- Amd,希望确保某个东西总是最后执行
- 在Windows 10中自动执行例行程序(主要与浏览器交互)
- 递归使用 eval() 是检查程序执行的好方法吗?
- 如何做到这一点,使代码在不传递条件后执行函数
- 是否存在将String转换为可执行的c++表达式的方法
- 从String(纯JS)执行JavaScript代码
- 为什么可以从JS ScriptEngine eval(String)执行Java代码
- 为什么String的split方法在NodeJS中是同步执行的
- 使用===来检查String.replace()是否实际执行了替换
- 从node.js中的String执行函数
- 将string作为函数执行