2011-07-12 10 views
2

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

サブフォルダを作成し、ファイルを作成してそのファイルに追加する、アプレットの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 \ユーザーリチャード\ハイテック\ AppStoreの\ 0d927ab7-74ba-449A-9db4-98e62cd0f53b.txt書き込み)拒否

答えて

2

JavaScriptからアプレットのメソッドを呼び出すと、結果として得られるアクセス許可は、アプレットのアクセス許可とJavaScriptブリッジのアクセス許可の交点になります。つまり、ローカルファイルにアクセスする権限はありません。

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

0

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

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

これは、UACデフォルトでhttp://msdn.microsoft.com/en-us/library/bb625962.aspx

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

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

このすべてが役立ちます。

+0

応答ありがとうございますが、署名されたアプレットはinit関数内から同じ操作を行うことができます。私はwin7、ie9を使用しており、同じ応答でchromeとxpを試しました。ポリシーファイルを更新することは、アプリケーションが使用される環境のためのオプションではありません –

+0

あなたは 'init()'関数の権限を持っているが、それ以外はどこにもありません。このスレッドでは、ポリシーファイルとJavaアプレットに関する悲惨な状況をまとめています。http://www.velocityreviews.com/forums/t542064-distributing-java-policy-with-applet-jar.html –

+0

あなたの言うことが正しいと仮定します。 initメソッドで5秒ごとに起動し、ある種のファイルIO操作を実行するためにグローバルブール変数をチェックするスレッドを作成できますか?私はそれがハックのように聞こえるが、それはうまくいくかもしれないと知っている –

関連する問題