2009-02-23 88 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進程的用戶據推測無法訪問該文件。

相關問題