2009-02-23 11 views
5

私たちは、いくつかのサーブレットアプリケーションで永続的なストレージに使用するbツリーに基づいて、ローカルに開発されたトリプルストアを持っています。 bツリー索引ファイルをサーブレット.warに埋め込むのではなく、それらを既知の場所に保管してサーブレットに直接アクセスさせたいと考えています。これはすべてJettyで動作しますが、Tomcatで試してみるとセキュリティの例外が発生します。 Tomcatのセキュリティモデルでは、サーブレットが.warが展開されているディレクトリツリーの外のファイルにアクセスするための明示的なアクセス権が必要であると言われています。私が正しくのTomcat(バージョン5.5)ドキュメントを理解している場合、catalina.policyに追加された次のサーブレットは、インデックスファイルがあるディレクトリにアクセスできるようにする必要があります。しかし、私はまだセキュリティ例外を取得サーブレットによるファイルアクセスを可能にするcatalina.policyの設定

grant codeBase "jar:file:${catalina.home}/webapps/mytestapp/-" 
{ 
    permission java.io.FilePermission "/var/data/tdb/-", "read, write, delete"; 
} 

を:

java.io.FileNotFoundException: 
        /var/data/tdb/kb/node2id.idn (Permission denied) 
    at java.io.RandomAccessFile.open(Native Method) 
    ... 

私は、インデックスファイルが正しい場所にあり、適切な権限で、壊れていないことを確認しました。私がセキュリティ設定で間違っていることに対する示唆やヒントは、感謝して受け取ります。

+0

ファイルを開く方法/使用しているコードを投稿することはできますか? –

+0

selinuxを実行していますか?そのような場合は、selinuxをJavaでそのディレクトリにアクセスできるように設定する必要があります。 – Eddie

答えて

4
java.io.FileNotFoundException: 
       /var/data/tdb/kb/node2id.idn (Permission denied) 

これはJavaセキュリティではなくアクセスを拒否するOSです。 Javaセキュリティの場合は、AccessControlException(またはその他の形式のSecurityException)を取得します。おそらくTomcatプロセスを実行しているユーザーは、そのファイルにアクセスできません。

+0

こんにちはTom、 ありがとうございました。それは私の最初の考えでしたが、私はすでにchown'edして、ファイルとディレクトリをTomcatプロセスと同じユーザーとグループにchgrpしました。それでも、それは私に調査の指針を与える。ありがとう。 –

+1

Tomが正しく、TomcatではなくOSファイルのアクセス許可の問題でした。私はかなり下には達していませんが、一時的にテストサーバー上のファイルアクセス権を+ rwに開くと、例外が取り除かれます。今私は店を大きく開いたままにしない、より制限的な設定を見つけなければなりません! –

関連する問題