Welche Berechtigungen müssen gewährt werden für applets zu schreiben temporäre Dateien?
Entwickeln wir ein applet und werden in der Lage zu Lesen/schreiben von Dateien in der Benutzer-temporären Dateien Verzeichnis (z.B. C:\Documents und Einstellungen\BENUTZERNAME\Lokale Einstellungen\Temp).
Das applet signiert ist, kann der Benutzer klickt auf den "zulassen" - option auf der applet-Start, und das Java Control Panel "der Benutzer zum erteilen von Berechtigungen für signierten content" und "Benutzer Berechtigungen zu erteilen, um Inhalt von einer nicht vertrauenswürdigen Autorität" aktiviert.
Jedoch auf Start, bekommen wir eine SecurityException:
java.lang.SecurityException: Unable to create temporary file
at java.io.File.checkAndCreate(Unknown Source)
at java.io.File.createTempFile(Unknown Source)
at java.io.File.createTempFile(Unknown Source)
at com.jniwrapper.util.AppletHelper.b(SourceFile:104)
at com.jniwrapper.util.AppletHelper.a(SourceFile:79)
at com.jniwrapper.util.AppletHelper.b(SourceFile:50)
at com.jniwrapper.util.AppletHelper.init(SourceFile:122)
at com.x.Y.init(Y.java:31)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Exception: java.lang.SecurityException: Unable to create temporary file
Wenn wir die Bearbeitung des java.policy-Datei grant all für alles, was dann das applet funktioniert OK, aber das ist deutlich unsicher. Welche minimal-Berechtigungen müssen wir gewähren, zu ermöglichen, den applet zu Lesen/schreiben/erstellen von Dateien in der Benutzer-temporären-Dateien-Verzeichnis?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit der policy-Datei ist irgendwie ok zum testen, aber sollte man nicht sein Vertrauen auf Sie für Ihre fertigen code, insbesondere bei der Erteilung der Berechtigung, es ist gefährlich.
Zur Interaktion mit Dateien, die Sie benötigen, um Folgendes zu tun.
Signieren der jar - Tonnen von tutorials wie diese, können Sie nur ein selbst signiertes eine.
Fügen Sie die Datei erstellen code zu einem privilegierten block hier ist ein Beispiel
Bekam der gleiche Punkt. Bis zur Erteilung der Erlaubnis so nah wie möglich, was notwendig ist, minimal ist, können Sie die Erteilung einer
FilePermission
auf${java.io.tmpdir}\-
mit Aktionenread,write,delete
. Dieser arbeitete für mich.Natürlich haben Sie zu ersetzen, die
${...}
durch den Wert der system-Eigenschaftjava.io.tmpdir
. Diese Eigenschaft wird vomjava.io.File.createTempFile
.Hinweis: Mit
someDir\-
Sie gewähren rekursiven Zugriff auf alle Unterverzeichnisse, von dersomeDir
Weg. An dieser Stelle können SiesomeDir\*
aber ich habe es noch nicht getestet.Wenn Sie Richtliniendateien, um Berechtigungen zu gewähren gibt es eine gute chance, dass diese Dateien bereits support verweisen auf system-Eigenschaften. Aber google das nochmal, um sicher zu sein. Wenn Sie eine benutzerdefinierte Richtlinie Umsetzung können Sie ganz einfach die Erlaubnis
java.io.FilePermission
.