Tenemos una tienda triple localmente desarrollada basada en b-trees que quiero usar para el almacenamiento persistente en una serie de aplicaciones servlet. En lugar de incrustar los archivos de índice b-tree en el servlet .war, me gustaría almacenarlos en una ubicación conocida y hacer que los servlets accedan a ellos directamente. Todo esto funciona en Jetty, pero genera una excepción de seguridad cuando lo pruebo en Tomcat. Me dijeron que el modelo de seguridad de Tomcat requiere permisos explícitos para que un servlet acceda a los archivos fuera del árbol de directorios donde se descomprime .war. Si he entendido la documentación de Tomcat (versión 5.5) correctamente, los siguientes añadidos a catalina.policy
debe permitir que el servlet para acceder a los directorios donde los archivos de índice son:Configuración de catalina.policy para permitir el acceso a archivos por servlets
grant codeBase "jar:file:${catalina.home}/webapps/mytestapp/-"
{
permission java.io.FilePermission "/var/data/tdb/-", "read, write, delete";
}
Sin embargo, sigo teniendo una excepción de seguridad:
java.io.FileNotFoundException:
/var/data/tdb/kb/node2id.idn (Permission denied)
at java.io.RandomAccessFile.open(Native Method)
...
Para marcar los obvios errores tontos: he comprobado que los archivos de índice están en la ubicación correcta, con los permisos correctos y no están dañados. Cualquier sugerencia o sugerencia sobre lo que tengo mal en la configuración de seguridad sería recibida con gratitud.
¿Puedes publicar cómo estás abriendo el archivo/qué código estás utilizando para hacerlo? –
¿Estás ejecutando selinux? Si es así, puede que necesite configurar selinux para que permita el acceso a ese directorio por parte de Java. – Eddie