2009-02-23 7 views
5

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.

+0

Puoi postare come stai aprendo il file/quale codice stai usando per farlo? –

+0

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

risposta

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

Questo è il sistema operativo che nega l'accesso, non la sicurezza Java. Se fosse la sicurezza Java, si otterrebbe un AccessControlException (o qualche altra forma di SecurityException). L'utente che sta eseguendo il processo Tomcat presumibilmente non ha accesso a quel file.

+0

Ciao Tom, Grazie per le informazioni. Questo è stato il mio primo pensiero, ma ho già chownato e chgrp'ed i file e la directory in cui si trovano allo stesso utente e gruppo del processo Tomcat. Tuttavia, mi dà un puntatore per indagare. Grazie. –

+1

Tom aveva ragione, era un problema con i permessi dei file OS, non Tomcat. Non ho ancora capito in fondo, ma l'apertura temporanea delle autorizzazioni del file sul server di test a + rw rimuove l'eccezione. Ora devo solo capire un'impostazione più restrittiva che non lascia il negozio spalancato! –