如何从在 Java 中的 Rhino 中运行的 JavaScript 执行本地文件?我会考虑在 Rhino 环境中工作的任何方法。我目前对该问题的探索如下。
我正在通过 java.lang.Runtime.exec 尝试这个,在 Mozilla“Scripting Java”教程的帮助下我可以访问它。但是,这是一个受限制的操作,因此直接调用它会产生访问控制异常。
为了解决这个问题,我需要使用 AccesController.doPrivileged 方法。下面是在 Java 中使用它的示例;
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
// Code goes here. Any permission checks within this
// run method will require that the intersection of the
// callers protection domain and the snapshot's
// context have the desired permission.
}
障碍是在 javascript 中复制 PrivilegedAction 的构造。
var ourRuntime = Packages.java.lang.Runtime.getRuntime();
//ourRuntime.exec("notepad.exe") //will raise Access Control Exception
var controller = Packages.java.security.AccessController.doPrivileged
var action = new Packages.java.security.PrivilegedAction(ourRuntime.exec("notepad.exe")) // somehow make this wwrk
controller.doPrivileged(action)