2

私はデジタル署名されたJavaアプレットを持っています。
xmlファイルをユーザーフォルダーに書き込むjavascriptから関数を呼び出せるようにする必要があります。

アプレットのinit関数に、サブフォルダーを作成し、ファイルを作成して、そのファイルに追加するコードがあります。これはエラーなしで実行されます。同じコードがjavascriptから直接呼び出される関数(下記)内にある場合、アクセス制御例外がスローされます。

public boolean createLocalXMLFile(String XML) {
    String path = BaseDirectory.baseDirectory + "\\TestFolder";
    try {
        boolean status;
        status = new File(path).mkdir();

        UUID fName = UUID.randomUUID(); 

        FileWriter fstream = new FileWriter(path + "\\"+fName+".xml");
        BufferedWriter out = new BufferedWriter(fstream);
        out.write(XML);
        //Close the output stream
        out.close();

        return true;
    }catch (Exception ex) {
        System.out.println("createXMLError \n"+ex.toString());
        return false;
    }

}

*ベースディレクトリはユーザーのホームパスを参照していることに注意してください

Javaコンソールエラーjava.security.AccessControlException:アクセスが拒否されました(java.io.FilePermission C:\ Users \ Richard \ Hytec \ AppStore \ 0d927ab7-74ba-449a-9db4-98e62cd0f53b.txt write)

4

2 に答える 2

2

JavaScript からアプレットのメソッドを呼び出すと、結果として得られるアクセス許可は、アプレットのアクセス許可と JavaScript ブリッジのアクセス許可が交​​差したものになります。これは、この場合、ローカル ファイルにアクセスするアクセス許可がないことを意味します。

アプレットの権限でコードを実行するには、重要なコードを でラップしますAccessController.doPrivileged(...)。もちろん、悪意のあるコードによって呼び出されたとしても、これが悪意のあることを実行できないことを最初に確認してください。

于 2011-07-12T14:06:27.423 に答える
0

まず、policyファイルに適切な権限が設定されていることを確認してください。デバッグするように設定してall-permissions、これが問題ではないことを確認できます。

この問題が発生するオペレーティング システムは何ですか? XPでも同じ問題が発生しますか? 私が質問する理由は、ポリシー ファイルによって付与された完全なアクセス許可を持つ署名付きアプレットでさえ、Windows Vista または Windows 7 を実行しているワークステーションでは完全なファイル アクセスができないためです。

これは、UAC がオフになっている場合でも、フォルダーの整合性レベルの概念が原因です。http ://msdn.microsoft.com/en-us/library/bb625962.aspx

デフォルトでは、ローカル アプレット ストアには完全性レベルが設定されています。これは、本質的に信頼されていないことを意味し、これらのディレクトリから実行されているプロセスは、他の完全性ディレクトリLowで実行されているファイルとプロセスに対してのみ完全なアクセス許可を持つことができます。Lowデフォルトでは、システム フォルダにはHigh整合性があり、その他のフォルダにはMedium整合性があります。

幸いなことに、これらはすべて変更できます。また、コントロール パネルの管理ツールを使用せずにフォルダの整合性レベルを変更できる無料のコマンド ライン ツールがあります。 http://www.minasi.com/apps/

これがすべて役立つことを願っています。

于 2011-07-12T11:44:43.223 に答える