3

Java で Rhino 内で実行されている JavaScript からローカル ファイルを実行するにはどうすればよいですか? Rhino環境内から機能する方法を検討します。この問題に関する私の現在の調査は以下のとおりです。

Mozillaの「Scripting Java」チュートリアルの助けを借りて、java.lang.Runtime.execを介してこれを試みています。アクセスできます。ただし、これは制限されたアクションであるため、直接呼び出すとアクセス制御の例外が発生します。

これを解決するには、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)

Mozilla スクリプティング Java

java.securit.AccessController

4

2 に答える 2

0

私はこの方法で(たとえば)KWriteを開始することに成功しました。基本的に、Runtimeオブジェクトを埋め込みJavaScriptインタープリターに公開します。

public class RunBasicScript {

public static void main(String[] args) {

    // Get a handle to the JavaScript context
    Context cx = Context.enter();

    try 
    {
        // Set up the standard JavaScript objects
        // like Object, Function etc.
        Scriptable scope = cx.initStandardObjects();

        // Make Runtime.getRuntime available to our JavaScript code
        Object exec = Context.javaToJS(Runtime.getRuntime(), scope);
        ScriptableObject.putProperty(scope, "exec", exec);

        // Build our awesome script
        String script = "exec.exec('kwrite');";

        // Now we execute the script
        Object obj = cx.evaluateString(scope, script, "Testing", 1, null);
    } 
    catch (Exception e) 
    {
        System.err.println("Error : " + e);
    }
    finally 
    {
        // We need to exit the Context.
        Context.exit();
    }
}

}

于 2012-05-30T10:29:16.263 に答える
0

Rhino は Java 6 スクリプトAPIでサポートされているため、スクリプトの評価を doPrivileged でラップし、必要な権限でスクリプト全体を実行できます。doPrivileged と組み合わせた Java スクリプト API の例はこちら

于 2012-05-30T10:24:30.097 に答える