【发布时间】:2010-10-09 10:00:50
【问题描述】:
我们有一个本地开发的基于 b-trees 的三元存储,我想在许多 servlet 应用程序中将其用于持久存储。我不想将 b-tree 索引文件嵌入到 servlet .war 中,而是希望将它们存储在已知位置并让 servlet 直接访问它们。这一切都适用于 Jetty,但当我在 Tomcat 中尝试时会引发安全异常。有人告诉我,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)
...
勾选明显的愚蠢错误:我检查了索引文件位于正确的位置,具有正确的权限,并且没有损坏。任何关于我在安全设置中出错的建议或提示将不胜感激。
【问题讨论】:
-
您能否发布您打开文件的方式/您使用的代码?
-
你在运行 selinux 吗?如果是这样,您可能需要配置 selinux 以便它允许 Java 访问该目录。
标签: java security configuration tomcat