一尘不染

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

tomcat

我们有一个基于b树的本地开发的三重存储,我想将其用于许多servlet应用程序中的持久性存储。我不想将b树索引文件嵌入到servlet
.war中,而是希望将它们存储在已知位置,并让servlet直接访问它们。这一切都在Jetty中起作用,但是当我在Tomcat中尝试时会引发安全异常。有人告诉我Tomcat的安全模型要求servlet拥有显式权限,以便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)
    ...

要勾勒出明显的愚蠢错误:我已经检查了索引文件是否在正确的位置,具有正确的权限,并且没有损坏。我们会很感激收到关于我在安全设置中出现问题的任何建议或提示。


阅读 275

收藏
2020-06-16

共1个答案

一尘不染

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

这是您的OS拒绝访问,而不是Java安全性。如果是Java安全性,您将获得AccessControlException(或其他形式的SecurityException)。您正在运行Tomcat进程的用户可能没有访问该文件的权限。

2020-06-16