Frage

Ich habe ein grundlegendes Applet zusammengestellt, in dem der Benutzer eine Datei von seiner Festplatte aus auswählt. Er liest die erste Zeile dieser Datei und übergibt diese an JavaScript, um eine zusätzliche Vorverarbeitung zu erhalten. Wenn Sie dann auf eine Schaltfläche klicken, versucht es, diese hochzuladen Datei über eine HTTP -Postanforderung. Ich habe ein sehr grundlegendes Open -Source -Applet zum Hochladen von Dateien gefunden, die ich für dieses letzte Bit kopiert und geändert habe.

Das Problem ist jedoch, dass es nicht ganz funktioniert. Es scheint, als würde es gut laufen, aber dann bin ich auf zwei Haken im Zusammenhang mit Berechtigungen gestoßen. Die Nachrichten in der Java -Konsole besagen, dass der Applet auf die folgenden zwei Berechtigungen zugreifen sollte:

java.lang.RuntimePermission setFactory
java.io.FilePermission read

Ich finde das seltsam, weil ich dachte, ich hätte dem Applet bereits die Erlaubnis erteilt, als ich es mit der "selbstsignierten" Option in NetBeans erstellt habe, und klickte dann, um das kleine Sicherheitspop-up im Browser zu bestätigen.

Auch der Teil, den ich selbst codiert habe, wo es die Datei liest und die erste Zeile an JavaScript weitergibt, funktioniert einwandfrei. Dies ist ein ziemlich klarer Indikator dafür, dass das Applet aus dem lokalen Dateisystem lesen kann! Das Problem beginnt erst, wenn ich tatsächlich versuche, das Upload zu starten. Ich nehme an, dass der Upload -Prozess in einem neuen Thread zu ausgeführt zu sein scheint, während der Rest von allem in der Hauptklasse ohne Erstellen von Threads ausgeführt wird.

Ich bin ein totaler Neuling von Java und weiß sehr wenig über Themen in Java. Muss ich die Berechtigungen irgendwie an diesen neuen Thread weitergeben? Oder etwas in diesem Effekt? Danke im Voraus.

War es hilfreich?

Lösung

Sie müssen wahrscheinlich den Sicherheitsmanager (Code, nicht Administrator) um Erlaubnis für einen privilegierten Betrieb fragen. Aus verschiedenen Gründen ist es im Allgemeinen nicht gut, dass ein Applet eine lokale Datei öffnen kann, sodass sie ziemlich stark bewacht wird.

Der Grundschlüssel ist anzurufen AccessController.doPrivileged() Und da ist ein Gutes kleines Tutorial Auf der Java Ranch -FAQ.

Andere Tipps

Ich hatte ein ähnliches Problem, das ewig dauerte, um zu lösen. Es stellt sich heraus, dass Applet -Methoden, die von JavaScript genannt werden, keine Berechtigungen haben, auch wenn Sie sie ausdrücklich in einer Richtliniendatei gewähren.

Diese Problemumgehung funktionierte für mich (Hinzufügen von Befehlen zu einer Warteschlange, durch die sich die Applet durchschlägt):http://blog.carrytheZero.com/?p=5

Stellen Sie sicher, dass Sie die Gefahren hier verstehen: Jeder kann JavaScript auf einer Seite ändern und das, was in das Applet eingespeist wird, ändern. In meinem Fall weiß ich, dass der Code niemals auf einen Webserver geht, und die Klasse ist nicht signiert, sodass er fehlschlägt, es sei denn, in dem von meiner Richtliniendatei gewährten bestimmten Ort.

Es liegt wahrscheinlich daran, dass das JavaScript nicht signiert ist. Ich schlage dringend vor, keinen Code zu unterschreiben, insbesondere wenn Sie nicht wissen, was Sie tun. Ab 6U10 (noch nicht auf Mac) können Applets JNLP einschließlich des FileOpenService verwenden, sodass Sie nicht unterschreiben müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top