Javaに関する様々な情報をご紹介します。Javaに関する様々な情報をご紹介します。(java.io.FilePermission)についてはじめまして。Hughesと申します。別サイトでも同様の質問をしているのですが、併せてこちらにも質問を書き込ませていただきます。「てめーがっつくなよ!」と不快な思いをさせてしまった場合は大変申し訳ありません・・。以下、別サイトで投稿した内容をコピペします。どなたか参考になる事だけでもあれば、是非ともご享受お願い致します。====================================はじめまして。Hughesと申します。今回、掲題の件についてかなり悩んでおり、色々と調査をしたのですが、解決策がどうしても見つからない為、皆様のお力をお借りしたく書き込みさせていただきました。半分、泣きが入っている状態です・・・。ファイルを転送するというような処理が走っております。大きな処理の流れとしては以下のようになります。1.アプレット画面(JSPに貼り付けている)にローカルの画像を貼り付ける(その際、ファイルのパスを保持しております)2.保持したパスを元にファイルを取得(Fileオブジェクトを生成)3.HTTPClientを用いて稼動中のServletにHTTPRequest(POST)に取得したファイルを添付して転送この3の部分の、HTTPRequestにファイルを添付する際に、掲題の例外が発生しております。署名付きアプレットですので、AllPermissionがもらえるはずなので、Fileの読み書きはできているのですが、何故か添付する際に例外が発生してしまいます。その際のコードの記述は以下のようになっております。postMethod.getParams()));------------------------------------------------上記コードの05行目で当例外が発生しております。どなたか解決策、または何か知っている事がございましたら、何卒ご享受お願い致します。評価0すみません、肝心の例外の内容を記述し忘れていました。以下にアプレットが吐き出したその時のエラーログを記述します。アプレット」で検索してみました。最初に引っかかったところにそれっぽいものが。>「てめーがっつくなよ!」と不快な思いをさせてしまった場合は大変申し訳ありません・・。こちらも、「マルチポスト」で検索されると良いでしょう。不快になるかどうかは人によりますけどね。17:07:23評価0mio様ご回答ありがとうございます。ご提示いただいたサイトですが、実はもうここらへんのサイトは見尽くしておりまして・・。私の説明に不足がありました為、お手間を取らせて申し訳ありませんでした。以下、追記とさせて頂きます。・ポリシーファイルをローカルに置いて実行した場合は正常に動く・ローカルアプレットビューワで実行した場合は正常に動く・ローカルでHTMLファイルにアプレットをベタ貼り(<object>タグを使用)で実行した場合は正常に動く今回の実行環境は、WEBサーバ上にアプレットのjarを配置し、それをJSPにベタ貼りしてアプレットを呼び出しております。サーバからアプレットを通して、ローカルファイルを読み込むといった内容になります。(あくまでイメージです)なお、別システムにおいて、似たような形式のアプレットが存在するのですが、そちらは正常に動作しました。(ファイルの転送が成功しました)記述内容はほぼ同じにしているのですが、何故か今現在作っているアプレット側だけが動きません。言えばその別のアプレットは、HttpClientAPIにおいて、非推奨のクラスを使っている事くらいです。(これも試してみましたがダメでした)唯一違う物と言えば、電子署名のstoreファイルが違う事くらいでしょうか・・・。署名そのものに、ポリシーの設定(各権限の設定)ができるとは思えず、こちらの方は別storeファイルを用いております。拙い文章の為、読みにくい・わかりにくい箇所が多々あるかと思いますので、お気づきの点またはご不明な点がございましたら、ご指摘お願い致します。17:27:57評価0>色々と調査をしたという文章からは、何をやったのかが分かりませんので。「やってない」と見なされても仕方がないです。>【条件】>【判明している事】このへん、滅茶苦茶重要なんですが...。どこで質問するにしても、これがあるとないとでは大違いです。ローカルで起動するHTMLではローカルにアクセスできるのが当たり前なので、それは意味がない気がしますが。>唯一違う物と言えば、電子署名のstoreファイルが違う事くらいでしょうか・・・。電子署名については詳しくないんでなんとも言えませんが、うまくいくものと違うものがあるなら、その全てについて、「〜だろう」という前提条件なしに実験して結果を見てみるのが、先決じゃないでしょうか。17:34:49評価0さらに追記です。現在、このアプレットにドロップされた画像に対し、アクセスをしてるであろう箇所は3箇所ございます。1.ドロップ時、画像のサムネイルをアプレット上に表示する時2.Fileオブジェクト生成時3.Multipartに画像(2のファイル)を添付する時もしかしたら2のタイミングで実際にファイルにアクセスしてるのかは私の中の知識では曖昧ですが、1に関してはきっちりとサムネイルは表示されております。従って、この時点ではファイルは読み込めてるのではないかと思うのですが・・・やはり3のところで読み込めないというエラーが発生してしまいます。FilePartクラスをnewする時に発生していますが、ソースを追ったところ(ログに書いてありますけど・・)、FilePartSourceクラスの中で、受け取ったFileオブジェクトのisFile()メソッド実行時に当該事象が発生しているようです。17:37:15評価0mio様ご回答・ご指摘ありがとうございます。>>【条件】>>【判明している事】>このへん、滅茶苦茶重要なんですが...。どこで質問>するにしても、これがあるとないとでは大違いです。仰る通りだと思います。いった場を利用する事がないので、何を書けば伝わりやすいか?という知識が欠けておりました。以降、これらにも十分気をつけたいと思います。>storeファイルが違うこれについてですが、その別アプレットで使っている署名ファイルは、過去の遺産みたいになってまして既に入手が不可能になっているのです・・。仕方がないので、自己署名という形で、新たに署名ファイルを生成して、アプレットJARに紐付けた次第です。少なくとも、この時点では何もしてません。なければ、#exists()や#createNewFile()は存在できませんから。17:46:05評価0>なお、別システムにおいて、似たような形式のアプレットが存在するのですが、そちらは正常に動作しました。(ファイルの転送が成功しました)同様のシステムでちゃんと動く物があるのであれば、今回の物でも同じ環境にしてやれば動くはずです。その動くシステムはJDK1.1時代の物でしょうか?JDK1.2いわゆるJava2以降セキュリティの考え方は大幅に変わっていますので、そういった環境の違いがあるのであれば動かないかも知れません。動くシステムは、今回の動かないクライアントの環境でも動くのでしょうか?javaコンパイラはclassファイルの互換性を1.1時代にすることができるのでEclipseでしたらコンパイラーの準拠レベルを1.3にしてみる価値はあるかもしれません。これでclassファイルは1.1互換となります。Javaのセキュリティの変遷については以下で確認できます。19:02:30評価0こんにちわ。気になったのですが、WebサーバはUnix系でしょうか。見ることの出来るアレ)で引っかかっている気がするのですが。Unix系だと、ユーザ毎、ファイル毎、ディレクトリ毎に権限ありますから。Unix系だとしたら・ファイルの権限(otherにrが付くか)・ディレクトリの権限(otherにrが付くか)を確認すると良いでしょう。read)を見る限り、Unixではないようです。考えられるのは、それアプレットのメソッドをJavaScript経由で呼び出していませんか?JavaScript経由で呼び出すアプレットのメソッドは、たとえ署名付気アプレットでもAllPermissionにはなりません。21:12:11評価0<皆様>ご回答・ご指摘誠にありがとうございます。返信が遅れました事、深くお詫び申し上げます。>2.Fileオブジェクト生成時>少なくとも、この時点では何もしてません。>でなければ、#exists()や#createNewFile()は存在できませんから。自分で投稿後に気付き「馬鹿な事言っちゃったなぁ・・」と反省致しました。3の部分で初めてローカルファイルに対してアクセスしてるという事になりそうなわけですね。サムネイルのところとは只今確認をしたところ、Fileクラスからパスだけ取得している状態でした。<tama様>>ちゃんと動くシステムは、今回の動かないクライアントの環境でも動くのでしょうか?はい、私の端末から、直接ローカルファイルをアップロードする事ができました。>その動くシステムはJDK1.1時代の物でしょうか?>JDK1.2いわゆるJava2以降セキュリティの考え方は大幅に変わっていますので、そういった環境の違いがあるのであれば動かないかも知れません。>javaコンパイラはclassファイルの互換性を1.1時代にすることができるのでEclipseでしたらコンパイラーの準拠レベルを1.3にしてみる価値はあるかもしれません。>これでclassファイルは1.1互換となります。この「動くシステム」は、JDK1.1時代の代物です。Java2以降のセキュリティの考え方が大幅に変わっているというのは知りませんでしたので、これは是非試してみたいと思います。<すったか様>>ふと気になったのですが、WebサーバはUnix系でしょうか。WebサーバはUnix系でございます。今回の事象の場合は、サーバ上のファイルにアクセスしているのではなく、クライアント(端末)のファイルにアプレットからアクセスをしております。ちなみに、クライアントは全部Windowsとなっております。<つばさ様>>考えられるのは、それアプレットのメソッドをJavaScript経由で呼び出していませんか?>JavaScript経由で呼び出すアプレットのメソッドは、たとえ署名付気アプレットでもAllPermissionにはなりません。これについても一度調査を致しました。(すみません書き忘れていました・・)”JavaScript経由で呼び出すアプレット”というものがどうもイメージが湧き辛くて・・。よろしければ、具体的な内容を教えて頂けないでしょうか?現在のこちらのアプレット呼び出し周りの作りとしては以下のような形になっております。APPLET!!</object></body>----------------------------------なお、コードは割愛して書いております。10:27:58評価0tama様コンパイル準拠レベルは既に1.3となっておりました・・。1.4でしてると思っていたのでちょっぴりショックでした。org.apache.commonsのjarが1.1用じゃないとか。hoge.jarで利用しているjarを動いているものと比較してみて署名の内容を確認するのもいいかもしれません。11:28:37評価0tama様ご指摘の通り、commons-httpclientが、1.1用のものではありませんでしたので実際に試してみました。動いてる方のjarに入れ替えて、再度実行したのですが、同様の事象が発生してしまいました・・。(try1)ちなみに、コンパイル準拠レベルを1.4にして、commons-httpclientは新しいものを使用して実行してみましたら、こちらも同様に動作致しませんでした・・。(try2)実行環境は以下の通りでした。1.3でコンパイルして署名したら動くんですか?動かないのであれば今の環境では無理かも知れません。なると、当時のJDKでコンパイルするくらいしか思いつきません。実際に動いているjarの署名内容を確認致しました。そのjarを取得するのにちょっと手間が掛かってしまった為に返信が遅れまして申し訳ありません。結果だけを申しますと、署名内容は全く一緒でした・・。アルゴリズムさえも一緒でした。1.3でコンパイルして署名したら動くんですか?こちらにつきましては、試すことは不可能なんです。具体的な事情はお書きする事は出来ませんが、一言で言うとこのjarが動く環境を作る事が無理なんです。それとまた書き忘れていたのですが、特権モード?というものでも実行してみましたが、その時も動きませんでした。15:06:44評価0先にも書いたように、当時のJDKでコンパイルするくらいしか思いつきません。今やっていることは弱い1.1のセキュリティーの元でポリシーファイルも無し、かつオレオレ証明書で動かそうとしているわけで。実際に動いている物があるんだから、動くはずが元になっていますから、当時に戻るしかないように思います。RSA証明付きアプレットにするのであれば、現在の環境でも可能だと思いますが・・いわゆるCA証明書発行局(VeriSignなど)から証明書を正式に発行してもらう必要がありますし、維持にお金も掛かります。VeriSignなどのデジタル証明書はJREにはじめからインストールされているので、ユーザが利用を認証すればAllPermissionがもらえるはずです(使ったこと無いので分かりませんが・・)RSA証明付きアプレットでオレオレ証明書を作って自己証明しても、AllPermissionは与えられず結局ポリシーファイルが必要になるようです。参考になるか分かりませんが、こちらもご覧下さい。15:49:13評価0やっと解決しました!!!!すみません、これからすぐに動くやつを組み込まなければいけませんので、後で必ずきちんと詳細報告を致します。先立ってお知らせ致しました。16:45:43評価0まず結論から述べると、JSPの<object>タグのarchive属性で指定しているJARファイル全てに署名をする事で動作致しました。クラス内でのローカルファイルへのアクセスは不可能という事象が起因で例外が発生していたようです。こちらの拙い説明にもかかわらず、ご指摘・アドバイスを頂けたmio様、tama様、すったか様、つばさ様、本当に本当に有難うございました。17:20:10評価0なるほど、そういうことでしたかてっきり全部に署名しているとばっかり思ってました^^;解決して何よりです。18:20:27評価0そうですよね。私の説明だと、applet.jarにしか署名してないというのは伝わらないですよね。私の至らなさで皆様の大事な時間を割いた事、深くお詫び致しますと共に、改めてお礼を申し上げます。18:38:42質問から6ヶ月以上経過しているので、回答を書き込むことはできません。