Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo zusammen,

ich möchte Daten von einem Applet aus speichern. Das Applet wird von einem Server gestartet. Auf dem gleichen Server sollen auch die Daten gespeichert werden. Mir ist bewusst, dass die Applets eine hohe Sicherheitseinstufung haben. Jedoch habe ich Informationen gefunden, die besagen, dass ein Applet auf dem Server auf dem es gestartet wurde auch mehr Rechte hat. Mir ist es schon gelungen eine .txt auszulesen, jedoch bekomme ich es nicht hin, in eine .txt zu schreiben.

Mein Leseaufruf sieht folgendermaßen aus:

URL url = new URL("file:///Z:/pfadangabe/test.txt");

BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));

debugZeile = br.readLine();

Ich habe auch schon verschiedene Schreibroutinen versucht, leider ohne erfolg:

Versuch 1:

URL url = new URL("file:///Z:/pfadangabe/test.txt");

File ausgabeDatei = new File (url.getFile());

FileWriter fw = new FileWriter(ausgabeDatei);

BufferedWriter bw = new BufferedWriter(fw);

bw.write("Testabc");

bw.close();

-> Klappt nicht

Versuch 2:

URL url = new URL("file:///Z:/pfadangabe/test.txt");

HttpURLConnection httpConn = (HttpURLConnection)url.openConnection();

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(httpConn.getOutputStream()));

bw.write("Testabc");

bw.close();

-> Klappt auch nicht

Da mir das Lesen ja gelingt verstehe ich nicht genau warum ich nicht schreiben kann. Kennt jemand von euch das Problem? Oder noch besser: die Lösung?

Geschrieben

Ein Applet darf - sofern es nich signiert wurde und damit eine ganze Reihe zusätzlicher Permissions erhält - prinzipiell auf keine externen Ressourcen zugreifen. Das bedeutet jegliches Hantieren mit java.io.File Objekten verbietet sich von vorneherein. Schlicht nicht möglich.

Erlaubt ist der Zugriff auf URLs, die vom gleichen Server geladen werden, von dem auch das Applet geladen wurde. Mehr nicht.

Die Lösung für dein Problem ist ein wenig komplizierter, als du dir das momentan vorstellt. Ein Applet läuft im Client-Context ab und hat daher - signiert oder unsigniert - keinerlei schreibenden Zugriff auf den Server.

Du wirst also auf dem Server einen Service einrichten müssen, der auf Requests vom Applet wartet und die eigentliche Verarbeitung auf dem Server (Files schreiben, etc.) übernimmt.

Geschrieben (bearbeitet)

Sorry,

Bekomme eine

"java.security.AccessControlException: access denied (java.io.FilePermission ...test.txt write)"

Hat also irgendwas mit den Rechten zu tun. Aber warum kann ich die Datei lesen, aber nicht schreiben?

Übrigens:

Das ganze Programm soll in einem Intranet laufen. Es muss also keine Internetverbindung aufgebaut werden können.

Bearbeitet von Beckerman2609
Geschrieben

Das hört sich ja nicht ganz so gut an.

Ist es denn möglich über das Applet einen Batch oder ähnliches anzuschmeißen welchem man die Parameter übergibt und diese dann weggeschrieben werden? Oder wie kann ich anders eine Schnittstelle zwischen Applet und Server programmieren?

Geschrieben

Ich würde wohl dazu tendieren, eine entsprechende Applikation auf dem Server laufen zu lassen, wie z.B. einen Webservice oder DAV usw und dem Applet dann eine entsprechende Verbindung zu der Applikation ermöglichen.

Das Applet läuft immer auf der Clientseite und hat somit keinen direkten Serverzugriff. Bevor man nun anfängt den Server zu zerschießen und unsicher zu machen, sollte man sich entsprechende Schnittstellen überlegen

Geschrieben
Ist es denn möglich über das Applet einen Batch oder ähnliches anzuschmeißen welchem man die Parameter übergibt und diese dann weggeschrieben werden?
Nicht in der Art und Weise, wie du dir das vorstellt.

Mach dir bitte zunächst klar, in welchem Kontext das Applet bzw. die JVM in der es sich befindet läuft. Die Ausführung findet auf dem Clientrechner statt. Der weiß erstmal überhaupt nicht, dass es Server existiert auf dem irgendetwas ausgeführt werden soll. Es hat daher auch erstmal nur Zugriff auf die Clientressourcen - und das auch nur beschränkt (siehe Sandboxkonzept).

Mach dir dann klar, was auf dem Server passieren soll und wie du dort die Verarbeitung initiierst. Dann überlege, wie die Schnittstelle zwischen Applet und Server aussehen kann. Innerhalb eines (unsignierten) Applets bist du fast schon zwangsweise auf eine HTTP basierte Kommunikation angewiesen, das bedeutet du musst auf Serverseite einen Dienst einrichten, der auf HTTP Requests hört.

Dies könnte z.B. ein Servlet sein, kann aber auch ein kleines Programm sein, dass direkt auf Port 80 lauscht und die Daten verarbeitet.

Aber nochmal: Mach dich zunächst mit den übergeordneten Konzepten vertraut, bevor du an die eigentliche Implementierung gehst.

Geschrieben

Habe mir jetzt mal die Sache mit den Policys durchgelesen. Habe auch schon eine Erstellt. Mit dem Tool habe ich eine Policy-Datei erstellt und diese in meinem Programm-Ordner hinzugefügt. Ganz so wie es auf der Seite erklärt ist. Hat aber auch nicht funktioniert. Bin da jedoch noch bei mich weiter einzuarbeiten.

Jetzt zu der Serververbindung:

Habe mich auch über die Kommunikation mit Servlets informiert. Dafür ist ja (so wie ich verstanden habe) ein Webserver nötig. Da wir einen solchen nicht im Hause haben müsste ich den auch noch extra für dieses Schreibrecht aufbauen. Kann man hierfür auch ein "normales" Java-Programm irgendwie für nehmen? Also ganz nach Client/Server-Socketprogrammierung?

Weiß jemand ob es sich lohnt noch weiter in die Zertifikats/Signierung/Policy-Schiene zu informieren? Habe da so einiges gelesen was ich erstmal verstehen muss. Und wie weiter oben erwähnt zeigen die ersten Taten mit der Handhabung von Policies keine Wirkung.

Auf jeden Fall erstmal Danke für die rege Beteiligung

Geschrieben

Habe mich auch über die Kommunikation mit Servlets informiert. Dafür ist ja (so wie ich verstanden habe) ein Webserver nötig. Da wir einen solchen nicht im Hause haben müsste ich den auch noch extra für dieses Schreibrecht aufbauen.

Was haben Schreibrechte mit Servlets zu tun? Ein Server ist erst einmal ein Stück Software, dass einen Dienst bereit stellt. Wie man diesen Dienst dann im konkreten umsetzt, müsstest Du halt schauen.

Aber warum den Umweg über Serverlets, ein Webservice z.B. mit nuSOAP ist recht schmal und lässt sich mit PHP umsetzen

Kann man hierfür auch ein "normales" Java-Programm irgendwie für nehmen? Also ganz nach Client/Server-Socketprogrammierung?

Kann man machen, aber wenn Du keinerlei Erfahrung darin hast, würde ich aus Sicherheitsgründen abraten, denn ein Serverdienst, den Du dann entwickeln musst, setzt natürlich Schwerpunkte auf Performance und Sicherheit.

Geschrieben
Habe mir jetzt mal die Sache mit den Policys durchgelesen. Habe auch schon eine Erstellt.
Du brauchst keine Policies! Du willst ja nicht vom Applet heraus Dateien auf dem Clientrechner beschreiben (denn nur das wird dir duch eine Policy erlaubt) sondern vom Client Nachrichten an den Server senden, der dann wiederrum das Schreiben von Dateien übernehmen soll. Da auf dem Server dann aber kein Applet sondern ein "richtiges" Programm laufen wird benötigst du da auch keine speziellen Policies.

Habe mich auch über die Kommunikation mit Servlets informiert. Dafür ist ja (so wie ich verstanden habe) ein Webserver nötig. Da wir einen solchen nicht im Hause haben müsste ich den auch noch extra für dieses Schreibrecht aufbauen. Kann man hierfür auch ein "normales" Java-Programm irgendwie für nehmen? Also ganz nach Client/Server-Socketprogrammierung?
Ja, du kannst hier auch ein "normales" Java-Programm nehmen. Wenn du dir z.B. einen Tomcat oder Jetty installierst haben beide in der Standardinstallation automatisch Schreibrechte für den Zugriff auf das lokale Dateisystem.
Geschrieben

Habe bisher keine Erfahrungen mit php. Socketprogrammierung habe ich teilweise schon in Java durchgeführt.

Nach meinem aktuellen Wissensstand würde ich jetzt versuchen ein Server-Programm zu programmieren, welcher auf eine Nachricht eines Client-Programmes wartet (Also das Applet).

Wieso ist es denn dem Applet möglich eine txt zu lesen, sie aber nicht zu schreiben. Müsste das nicht aus gleichem Grund verboten sein?

Wegen der Sache mit Tomcat und Servlets:

Ist es denn möglich ein solches Programm ohne einen Webserver laufen zu lassen? Das ganze Programm ist Teil eines Projektes welches auch komplett Dokumentiert und Präsentiert werden wird. ich sollte den Umgang mit meinen benutzten Tools also auch verstehen und habe es nicht zwangsweise nötig mich mit nochmehr neuem Material zu beschäftigen. Ihr wisst schon...

Geschrieben

Wieso ist es denn dem Applet möglich eine txt zu lesen, sie aber nicht zu schreiben. Müsste das nicht aus gleichem Grund verboten sein?

Das Applet läuft auf dem Client in einer Sandbox und braucht eben ggf mehr Berechtigungen (Sicherheitskonzept der Browser). Auf den Server kann es nicht schreiben, weil es dort nicht läuft.

Ist es denn möglich ein solches Programm ohne einen Webserver laufen zu lassen?

Natürlich, wenn Du Dich eben selbst um die Kommunikation kümmerst. Nur wenn Du so etwas noch nicht in größeren Projekten realisiert hast, dann ist dies ein Sicherheitsrisiko, da man bei unsachgemäßer Programmierung diesen Dienst missbrauche kann. Außerdem solltest Du Dir auch Gedanken über die Performance machen, denn wenn auf den Dienst ein paar 1000 Connections statt finden, solltest Du diese auch richtig verarbeiten können und diese sollten dann nicht den Server lahmlegen.

ich sollte den Umgang mit meinen benutzten Tools also auch verstehen und habe es nicht zwangsweise nötig mich mit nochmehr neuem Material zu beschäftigen. Ihr wisst schon...

Dann schraub Deine Ansprüche runter. Du kannst nicht mit einem Applet auf das Dateisystem des Servers zugreifen, d.h. Du musst eine Schnittstelle schaffen, wie diese konkret aussieht, darüber musst Du Dir Gedanken machen, es gibt dafür mehrere Möglichkeiten z.B. wäre RMI auch noch eine Java-Only-Alternative zu Soap. Letztendlich musst Du aber Dich mit dem Thema Kommunikation auseinander setzen

Geschrieben
Wieso ist es denn dem Applet möglich eine txt zu lesen, sie aber nicht zu schreiben. Müsste das nicht aus gleichem Grund verboten sein?
Ist es auch!

Du kannst keine Datei direkt lesen, jeder Aufruf von new File("irgendwas") wird in einem unsignierten Applet fehlschlagen. Was du kannst ist eine Ressource aus dem Classpath zu lesen. Da wird während der Entwicklung innerhalb einer IDE in der Regel in einen Fileaufruf umgesetzt (weil hier die Classes und Ressourcen eben direkt im Filesystem liegen) muss aber in einer Produktionsumgebung nicht zwangsläufig auch so laufen.

Vom Gedanken her ist es ganz einfach: Du darfst in einem Applet nichts tun, was dazu geeignet wäre lokale Ressourcen des Rechners, auf dem das Applet läuft, an jemand anders zu übermitteln.

ich sollte den Umgang mit meinen benutzten Tools also auch verstehen und habe es nicht zwangsweise nötig mich mit nochmehr neuem Material zu beschäftigen.
So wird es nicht funktioniert.

Softwareentwicklung ist eben mehr als ein Klick hier und ein Klick da, und schon hast du das Ergebnis, was du haben willst. Für bestimmte Bereiche wirst du dich mit den Interna beschäftigen müssen und verstehen müssen was hinter den Kulissen passiert. Wenn du das nicht willst schließe ich mich flashpixx an: Schraube deine Ansprüche herunter. Von nichts kommt nichts.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...