2009-02-23 11 views
5

Wir haben einen lokal entwickelten Triple-Store basierend auf B-Bäumen, den ich für die dauerhafte Speicherung in einer Reihe von Servlet-Anwendungen verwenden möchte. Anstatt die b-tree-Indexdateien in das Servlet .war einzubetten, möchte ich sie an einem bekannten Ort speichern und die Servlets direkt darauf zugreifen lassen. Das alles funktioniert in Jetty, löst aber eine Sicherheitsausnahme aus, wenn ich es in Tomcat versuche. Mir wurde gesagt, dass das Sicherheitsmodell von Tomcat explizite Berechtigungen für ein Servlet benötigt, um auf Dateien zuzugreifen, die sich außerhalb der Verzeichnisstruktur befinden, in der das WAR entpackt ist. Wenn ich die Tomcat (Version 5.5) Dokumentation richtig verstanden habe, ist folgendes hinzugefügt catalina.policy das Servlet, damit die Verzeichnisse zuzugreifen, in dem die Indexdateien sind:Catalina.policy für den Dateizugriff über Servlets einstellen

grant codeBase "jar:file:${catalina.home}/webapps/mytestapp/-" 
{ 
    permission java.io.FilePermission "/var/data/tdb/-", "read, write, delete"; 
} 

Allerdings habe ich immer noch eine Sicherheitsausnahme erhalten:

Zum Ankreuzen der offensichtlichen dummen Fehler: Ich habe überprüft, dass die Indexdateien mit den richtigen Berechtigungen am richtigen Ort sind und nicht beschädigt sind. Irgendwelche Vorschläge oder Hinweise auf das, was ich falsch in den Sicherheitseinstellungen bin, würde dankbar erhalten.

+0

Können Sie vielleicht posten, wie Sie die Datei öffnen/welchen Code verwenden Sie, um dies zu tun? –

+0

Laufen Sie selinux? Wenn dies der Fall ist, müssen Sie selinux möglicherweise so konfigurieren, dass der Zugriff auf dieses Verzeichnis von Java ermöglicht wird. – Eddie

Antwort

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

Dies ist Ihr Betriebssystem verweigert den Zugriff, nicht Java-Sicherheit. Wenn es Java-Sicherheit wäre, würden Sie eine AccessControlException (oder eine andere Form von SecurityException) bekommen. Der Benutzer, für den Sie den Tomcat-Prozess ausführen, hat vermutlich keinen Zugriff auf diese Datei.

+0

Hallo Tom, Danke für die Info. Das war mein erster Gedanke, aber ich habe bereits die Dateien und das Verzeichnis, in dem sie sich befinden, an den gleichen Benutzer und die gleiche Gruppe wie der Tomcat-Prozess ch cht. Trotzdem gibt es mir einen Anhaltspunkt zum Nachforschen. Vielen Dank. –

+1

Tom hatte recht, es war ein OS-Dateiberechtigungs-Problem, nicht Tomcat. Ich bin nicht ganz auf den Grund gegangen, aber das vorübergehende Öffnen der Dateiberechtigungen auf dem Testserver zu einem + rw entfernt die Ausnahme. Jetzt muss ich nur eine restriktivere Einstellung finden, die den Laden nicht weit offen lässt! –

Verwandte Themen