Настройка catalina.policy, чтобы разрешить доступ к файлам сервлетами - PullRequest
5 голосов
/ 23 февраля 2009

У нас есть локально разработанное тройное хранилище на основе b-деревьев, которое я хочу использовать для постоянного хранения в ряде приложений сервлетов. Вместо того, чтобы встраивать файлы индекса b-дерева в сервлет .war, я хотел бы хранить их в известном месте, и чтобы сервлеты обращались к ним напрямую. Это все работает в Jetty, но вызывает исключение безопасности, когда я пробую это в Tomcat. Мне сказали, что модель безопасности Tomcat требует явных разрешений сервлету для доступа к файлам вне дерева каталогов, куда распаковывается .war. Если я правильно понял документацию Tomcat (версия 5.5), следующее, добавленное к catalina.policy, должно позволить сервлету получить доступ к каталогам, в которых находятся индексные файлы:

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

Чтобы отметить очевидные глупые ошибки: я проверил, что файлы индекса находятся в правильном месте, с правильными разрешениями и не повреждены. Любые предложения или намеки на то, что я ошибся в настройках безопасности, будут с благодарностью приняты.

1 Ответ

4 голосов
/ 23 февраля 2009
java.io.FileNotFoundException: 
                /var/data/tdb/kb/node2id.idn (Permission denied)

Это ваша ОС, запрещающая доступ, а не безопасность Java. Если бы это была безопасность Java, вы бы получили AccessControlException (или другую форму SecurityException). Пользователь, с которым вы запускаете процесс Tomcat, предположительно не имеет доступа к этому файлу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...