Toon posts:

[Java] Naar bestand schrijven vanuit applet

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,
Ik ben sinds kort bezig met een applet dat gegevens in een textfile zou moeten schrijven. Nou heb ik onder eclipse -> run as -> java applet, het programma uitgetest en het werkt perfect. Nu probeer ik het onder firefox te draaien, maar hier geeft hij een permission error. Deze wordt gegenereerd door firefox doordat hij applets niet toe staat om een write uit te voeren naar een file, behalve als de bestanden lokaal staan (wat bij mij het geval is). Toch geeft hij nog steeds een permission error, weet iemand hoe ik dit moet oplossen?

Thx.

  • psyBSD
  • Registratie: April 2004
  • Laatst online: 02-01-2021

psyBSD

Hates 0x00 bytes

Niet, applets hebben geen directe toegang tot het systeem... dit brengt nl security-problemen met zich mee.

Dus geen applets gebruiken ;) (of een bug in jvm exploiten, ik denk dat het eerste makkelijker en betrouwbaarder is)

| Olympus OM-D EM10 mk2 | m.Zuiko 14-42mm f/3.5-5.6EZ | m.Zuiko 40-150mm f/4-5.6 R | m.Zuiko 60mm f/2.8 | 2x Godox v860 | Godox X1 |


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 01-12 19:51

Robtimus

me Robtimus no like you

Of de applet signen.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • wzzrd
  • Registratie: Februari 2000
  • Laatst online: 26-06 17:09

wzzrd

The guy with the Red Hat

't Is niet helemaal mijn ding hoor, maar ik kan me niet voorstellen dat een gesignde applet wel toegang tot je systeem heeft. Lijkt me een ongezonde situatie.

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 07:35
wzzrd schreef op vrijdag 09 maart 2007 @ 09:57:
't Is niet helemaal mijn ding hoor, maar ik kan me niet voorstellen dat een gesignde applet wel toegang tot je systeem heeft. Lijkt me een ongezonde situatie.
Als ik de info op deze site zo lees dan wil het wel: http://www.developer.com/java/data/article.php/3303561.

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


  • wzzrd
  • Registratie: Februari 2000
  • Laatst online: 26-06 17:09

wzzrd

The guy with the Red Hat

Een signed applet zegt toch gewoon 'ik ben signed, trust me'? De toegang tot lokale bestanden hangt af van het antwoord dat de gebruiker op die vraag geeft, dacht ik...

Verwijderd

Inderdaad, applets uitvoeren met programma's zoals appletviewer hebben meer rechten dan wanneer je een applet (die ergens op een website staat) uitvoert in een browser. Je zal je applet moeten signen en de gebruiker zal een certificaat moeten accepteren.

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 07:35
wzzrd schreef op vrijdag 09 maart 2007 @ 10:06:
Een signed applet zegt toch gewoon 'ik ben signed, trust me'? De toegang tot lokale bestanden hangt af van het antwoord dat de gebruiker op die vraag geeft, dacht ik...
Ja, maar als je geen signed applet hebt, dan komt er geen vraag aan de gebruiker, dan is het gewoon niet mogelijk om toegang te krijgen en word er ook niet naar gevraagd. Als je hem signed dan krijg je wél die vraag voorgeschoteld. Het lijkt me handig om dat te doen, want anders zou je bij ieder Applet de vraag kunnen krijgen of je hem wel vertrouwd, wat helemaal niet wenselijk is.

Als ik hem trouwens lokaal draai (file://C:\TestApplet.html) dan heeft de Applet wel gewoon toegang tot het bestandssysteem, zonder dat de Applet signed is.

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Verwijderd

Topicstarter
Het probleem was dat er 2 applets in het HTML bestand stonden. Een waarvan ik geen source-code had en 1 die ik zelf had geschreven. Daardoor zou ik dus geen .jar aan kunnen maken die benodigd is voor het createn van een digital certificate.

Heb het inmiddels opgelost door de eerste applicatie te decompilen. Daardoor kan ik hem wel mee compileren in een .jar.

  • Pim.
  • Registratie: Mei 2001
  • Laatst online: 16-08 16:15

Pim.

Aut viam inveniam, aut faciam

Op verzoek TS
Move --> Programming

[ Voor 16% gewijzigd door Pim. op 09-03-2007 12:23 ]

"The trouble with quotes from the Internet is that you can never know if they are genuine." - Elvis Presley | Niet met me eens ? DM ME


Verwijderd

Topicstarter
Het lijkt er op, dat ik alsmaar niet de rechten krijg om de file aan te passen.

Als applet output krijg ik:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Applet initialized 

Applet started 

File located in: file:/workspace/WebContent/

Opening File: /workspace/WebContent/write.txt

File opened: /workspace/WebContent/write.txt

Testing Read.....Read succesfull

Testing Write....Write ERROR: Message = access denied (java.io.FilePermission /workspace/WebContent/write.txt write)



De java-code die er bij hoort is:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
try{
    java.net.URL url = this.getCodeBase();
    output.append("File located in: "+ url +"\r\n");
    filename = url.toString().replaceFirst("file:", "") + filename;
    output.append("Opening File: "+filename+"\r\n");
    File openedFile = new File(filename);
    output.append("File opened: "+ openedFile.getAbsolutePath() +"\r\n");
    
    output.append("Testing Read.....");
    if(openedFile.canRead()){output.append("Read succesfull\r\n");}
    output.append("Testing Write....");
    if(openedFile.canWrite()){output.append("Write succesfull\r\n");}   

    openedFile.delete(); //delete the old file
    openedFile.createNewFile(); //create a new file
    output.append("Deleted old file, creating new file\r\n");
    FileWriter writer = new FileWriter(openedFile);
}
catch(Exception e)
{
    this.finished = -1;
    output.append("Write ERROR: Message = "+e.getMessage()+"\r\n");
}



Het aanmaken van een digitaal certificaat lijkt niet te helpen. Het zal dus een instelling ergens anders op het systeem moeten zijn. De applet draait op een win32 partition, dus user-rechten zouden "waarschijnlijk" geen rol moeten spelen.

[ Voor 3% gewijzigd door Verwijderd op 09-03-2007 13:22 ]


  • OxiMoron
  • Registratie: November 2001
  • Laatst online: 08-07 14:27
Je moet denk ik beter onderscheid maken wat op de server staat en wat lokaal staat.

getCodebase geeft de directory aan waar de applet vandaan komt (aka de server)
Vervolgens lees je daar een file; geen probleem.
Daarna probeer je daar te schrijven: probleem, je kunt vanaf een client niet zomaar naar bestanden op een webserver schrijven.

Daar zit je probleem; en dit kun je met geen mogelijkheid doen met een applet, want dan zou iedereen zomaar rechtstreekt kunnen schrijven door Save As -> URL te doen ;)

Als je echt op de clientpc wilt schrijven moet je bijvoorbeeld naar C:\textfile.txt schrijven en je applet signen om dit toe te staan.
Als je naar de server wilt schrijven zul je het anders aan moeten pakken, je zou bijvoorbeeld een post kunnen doen naar een php pagina die het vervolgens wegschrijft. Met HttpURLConnection kan dit makkelijk gedaan worden.

Albert Einstein: A question that sometime drives me hazy: Am I or are the others crazy?


Verwijderd

Topicstarter
Alle bestanden staan op de locale host. De applet is niet bedoeld om in een client - server architectuur te gaan dienen.

Een mooi voorbeeld overigens, dat het zou moeten kunnen is:
http://www.javaworld.com/javaworld/jw-12-2000/security/writeFile.java

[ Voor 47% gewijzigd door Verwijderd op 09-03-2007 13:49 ]


Verwijderd

Topicstarter
Wat ik eigenlijk probeer te doen is een applicatie waarmee je opstart op de client, waarna je op een knop drukt en een bestand <DIR>/write.txt wordt beschreven. Waarbij <DIR> de directory is waarin de applet draait op de client. Ik weet dat het inderdaad niet mogelijk zou moeten zijn voor een client om dingen op een server weg te schrijven. In dit geval is het dus echt een client draait, client schrijft applicatie

  • OxiMoron
  • Registratie: November 2001
  • Laatst online: 08-07 14:27
Het kan wel, maar dan moet je dus de path waar geschreven moet worden anders benaderen denk ik.. en dan moet je je applet nog steeds goed signen

En waarom dan moeilijk doen met een applet ipv een gewone applicatie?


Zou zeggen: run dat voorbeeld eens.. of vang zelf de error better af door onderscheid te maken tussen de IOException en de SecurityException.

Ik weet zo ook niet als wat voor user een applet gestart wordt..

Albert Einstein: A question that sometime drives me hazy: Am I or are the others crazy?

Pagina: 1