Abbiamo un negozio triplo sviluppato in locale basato su b-tree che desidero utilizzare per l'archiviazione permanente in un numero di applicazioni servlet. Piuttosto che incorporare i file di indice b-tree nel servlet .war, vorrei memorizzarli in una posizione nota e fare in modo che i servlet li accedano direttamente. Tutto questo funziona in Jetty, ma solleva un'eccezione di sicurezza quando provo in Tomcat. Mi è stato detto che il modello di sicurezza di Tomcat richiede autorizzazioni esplicite affinché un servlet possa accedere ai file all'esterno dell'albero della directory in cui viene decompresso .war. Se ho capito la (versione 5.5) Documentazione Tomcat correttamente, il seguente aggiunto catalina.policy
dovrebbe consentire il servlet per accedere alle directory in cui i file di indice sono:Impostazione catalina.policy per consentire l'accesso ai file tramite servlet
grant codeBase "jar:file:${catalina.home}/webapps/mytestapp/-"
{
permission java.io.FilePermission "/var/data/tdb/-", "read, write, delete";
}
Tuttavia, ho ancora ottenere un'eccezione di sicurezza:
java.io.FileNotFoundException:
/var/data/tdb/kb/node2id.idn (Permission denied)
at java.io.RandomAccessFile.open(Native Method)
...
Per spuntare gli ovvi errori stupidi: ho controllato che i file di indice siano nella posizione corretta, con le autorizzazioni corrette e che non siano danneggiati. Eventuali suggerimenti o suggerimenti su ciò che ho sbagliato nelle impostazioni di sicurezza sarebbero stati ricevuti con gratitudine.
Puoi postare come stai aprendo il file/quale codice stai usando per farlo? –
Stai correndo selinux? In tal caso, potrebbe essere necessario configurare selinux in modo tale da consentire l'accesso a tale directory da parte di Java. – Eddie