2009-02-23 91 views
5

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

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

你可能会发布你如何打开文件/你正在使用什么代码来做到这一点? – 2009-02-23 20:40:52

+0

您正在运行selinux吗?如果是这样,您可能需要配置selinux以便它允许Java访问该目录。 – Eddie 2009-02-23 20:51:48

回答

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

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

相关问题