如何在Java中的Rhino中運行JavaScript執行本地文件?我會考慮在Rhino環境中使用的任何方法。我目前對這個問題的探討如下。從Rhino腳本中訪問Java特權操作
我試圖通過java.lang.Runtime.exec,從Mozilla的「腳本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)
這種方法應該工作,但我很謹慎執行整個腳本使用權限進行的,似乎是不好的做法。 – OutRideACrisis
@OutRideACrisis,每個腳本當然可以擁有不同的權限。實現OP目標的另一種方法可能是使用URLReader並傳入帶有自定義方案的URL(例如「scripts://」)。然後,您可以控制代碼之外的每個腳本的訪問權限。沒有測試過這個,但我認爲它會起作用。 –