5

ユーザーがハード ドライブからファイルを選択する基本的なアプレットを作成しました。このアプレットはこのファイルの最初の行を読み取り、それを JavaScript に渡して追加の前処理を行います。ボタンをクリックすると、それをアップロードしようとします。 HTTP POST リクエストを介してファイルします。この最後のビットのためにコピーして変更したファイルをアップロードするための非常に基本的なオープン ソース アプレットを見つけました。

しかし、問題は、それがうまくいかないことです。正常に動作しているように見えますが、アクセス許可に関連する 2 つの障害に遭遇しました。Java コンソールのメッセージは、アプレットが次の 2 つのパーミッションでアクセス拒否エラーを起こしたことを示しています。

java.lang.RuntimePermission setFactory
java.io.FilePermission read

NetBeans で「自己署名」オプションをチェックしてアプレットをビルドし、クリックしてブラウザの小さなセキュリティ ポップアップを確認したときに、すでにアプレットに許可を与えていると思っていたので、これは奇妙です。

また、私が自分でコーディングした、ファイルを読み取って最初の行を JavaScript に渡す部分も問題なく動作します。これは、アプレットがローカル ファイル システムから読み取れることを明確に示しています。実際にアップロードを開始してみるまで問題は発生しません。注意すべきことの 1 つは、アップロード プロセスが新しいスレッドで実行されているように見えるのに対し、残りのプロセスはすべてスレッドを作成せずにメイン クラスで実行されていることです。

私は Java の初心者であり、Java のスレッドについてほとんど知りません。どうにかしてこの新しいスレッドにアクセス許可を渡す必要がありますか? またはその趣旨の何か?前もって感謝します。

4

3 に答える 3

3

おそらく、セキュリティ マネージャー (管理者ではなくコード) に特権操作を行う許可を求める必要があります。さまざまな理由から、一般的に、アプレットがローカル ファイルを開くことは望ましくないため、かなり厳重に保護されています。

基本的なキーは呼び出すことでAccessController.doPrivileged()あり、Java Ranch FAQ には、それに関する優れた小さなチュートリアルがあります。

于 2009-03-06T19:53:20.680 に答える
1

私は解決するのに永遠にかかった同様の問題を抱えていました。ポリシー ファイルで明示的に付与したとしても、JavaScript から呼び出されたアプレット メソッドには権限がないことが判明しました。

この回避策は私にとってはうまくいきました(アプレットがループするキューにコマンドを追加する): http://blog.carrythezero.com/?p=5

ここでの危険性を理解していることを確認してください: 誰でもページ上の JavaScript を変更し、アプレットにフィードされる内容を変更できます。私の場合、コードがWebサーバーに送信されることはなく、クラスは署名されていないため、ポリシーファイルによって許可された特定の場所にない限り失敗します.

于 2011-01-14T20:11:53.447 に答える
0

おそらく、JavaScript が署名されていないためです。特に自分が何をしているのかわからない場合は、コードに署名しないことを強くお勧めします。6u10 (まだ Mac にはありません) 以降、アプレットは FileOpenService を含む JNLP を使用できるため、署名する必要はありません。

于 2009-03-06T20:33:34.500 に答える