2009-03-06 8 views
5

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

問題は、しかし、それはかなり動作しません。それはうまく動作しているようだが、私はアクセス許可に関連する2つの障害に遭遇する。 Javaコンソール内のメッセージは、アプレットがアクセスは、次の2つの権限にエラーを否定していたと言う:私は私がそれを建てたとき、私はすでにアプレットに許可を与えたと思ったので、私はこれは奇妙な見つける

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

」 NetBeansで「自己署名」オプションをチェックしてから、ブラウザの小さなセキュリティポップアップをクリックして確認します。

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

私はJavaの初心者ですが、Javaのスレッドについてはほとんど知りません。この新しいスレッドにアクセス許可を何らかの形で渡す必要がありますか?またはその効果の何か? ありがとうございます。

答えて

3

権限のある操作を行う権限がある場合は、セキュリティ管理者(管理者ではなくコード)に問い合わせる必要があります。いろいろな理由から、アプレットがローカルファイルを開くことができるのは一般的には良いことではないので、かなり重視されています。

基本的なキーは、AccessController.doPrivileged()を呼び出し、good little tutorialがJava Ranch FAQにあります。

+0

doPrivilegedは非常に危険です。アプレットに署名するときと同じです。 –

+3

これは、アプレットがファイルを読み取ることを可能にします。それほど多くはありません。それはそこにあり、質問に対する答えです。 –

0

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

+0

JavaScriptはありません。 Java。 – Ricket

+0

JavaScriptには問題があるとの質問があります。私の推測では、問題を引き起こしているアクセス制御コンテキストのJavaScriptが原因です。 –

1

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

この回避策は、(アプレットが通過ループキューにコマンドを追加する)私の仕事: http://blog.carrythezero.com/?p=5

あなたはここに危険性を理解していることを確認してください:誰でもページ上のJavaScriptを変更しに送り込まなっているものに変更することができますアプレット。私の場合、コードはWebサーバ上で決して実行されず、クラスは署名されていないので、ポリシーファイルによって与えられた特定の場所になければ失敗します。