设置catalina.policy以允许servlet访问文件

我们有一个基于b-tree的本地开发的三元组存储,我想用它来在许多servlet应用程序中进行持久存储。 我不想将b-tree索引文件嵌入到servlet .war中,而是希望将它们存储在已知位置并让servlet直接访问它们。 这一切都在Jetty中工作,但是当我在Tomcat中尝试它时会引发安全性exception。 我被告知Tomcat的安全模型需要显式权限,以便servlet访问解压缩.war的目录树之外的文件。 如果我已正确理解Tomcat(版本5.5)文档,则添加到catalina.policy的以下内容应允许servlet访问索引文件所在的目录:

 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) ... 

勾选明显的哑错误:我已检查索引文件是否位于正确的位置,具有正确的权限,并且没有损坏。 我将非常感谢您对我在安全设置中出错的任何建议或提示。

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

这是您的操作系统拒绝访问,而不是Java安全性。 如果是Java安全性,您将获得AccessControlException (或其他forms的SecurityException )。 您正在运行Tomcat进程的用户可能无法访问该文件。