# SecurityException beim lesen/schreiben eine Datei



## lol (15. Dez 2007)

Umgebung: Symbian mit UIQ3
Folgendes Szenario:
Möchte den Programmverlauf während der Development-Phase in einer Datei loggen.

mittels FileConnection fc =... öffne ich eine Connectio. Dabei werde ich vom System gefragt, ob ich das Lesen der Datei "file///Ms/..." erlauben möchte. Mit "Ja" geht's weiter.
Ich frage nach der Existens der Datei, wieder Sicherheitsfrage vom System, mit "Ja" gehts weiter.

Nun kommt das Problem: Möchte ich mit "fs.canRead()", oder "fc.canWrite()", oder einen DataOutputStream öffnen, und ich diese Sicherheisabfrage wieder mit "Ja" beantworte, wirft das Midlet eine securityException.
- Im Emu läuft es brav, andere Devices zum Testen habe ich nicht.
Möchte ich die Berechtigungen im Sicherheitsmenü für das Midlet ändern, werden meine Einstellungen NICHT übernommen. "Festgenagelt" sind dort Immer Benutzberechtigungen:Automatischer Start und Interaktionsmodusro Sitzung


----------



## Gast (17. Dez 2007)

und was genau ist jetzt deine frage? ;-)

also ich kenne kein gerät, bei dem sich die sicherheitsabfragen zu fileconnection api modizifieren oder gar dauerhaft abschalten lassen. das hängt offiziell mit der sicherheit zusammen (inoffiziell allerdings, damit dass zertifikatausteller a la thawte mehr geld scheffeln können ;-)).


----------



## Gast (17. Dez 2007)

Kurz und knapp:

Ist das Problem, dass ich keine Datei auf dem Symbian/UIQ3 anlegen kann ein spezifisches Symbian/Modell-Problem (m600i), oder ist ein ein generelles Sicherheitsproblem seitens Java?


----------



## Backwardsman (17. Dez 2007)

also ich gehe mal davon aus, dass dein gerät/symbian die fileconnection api (jsr 75) unterstützt.

prinzipiell sollte das schreiben und lesen von dateien möglich sein, es kann jetzt zb. ein programmierfehler deinerseits sein, es kann sein, dass du die datei von einer location lesen/schreiben willst, auf der du bzw. java keine berechtigungen hat, etc.!? funktioniert im emulator alles fehlerlos?

an deiner stelle würd ich mir auf dem gerät mal schnell einen kleinen j2me dateisystem-browser schreiben oder runterladen (gibts z.b. bei sony ericsson dev). einfach mal um zu sehen, in welche ordner nur mit j2me reinkommst.

besonders wichtig beim umgang mit der jsr 75 ist die pfadangabe der dateien ordner und viele geräte habena auch probleme damit wenn die operationen nicht in separaten threads ablaufen... ist also im moment noch nicht so ganz klar zu sagen, woran es bei dir hängt.


----------



## Gast (17. Dez 2007)

Super für die Hinweise, danke.
Ich bin gerade unterwegs, werde am späteren Nachmittag mit genaueren Informationen aufwarten können.


----------



## Gast (18. Dez 2007)

Im Emu läuft die Anwendung ganz brav durch.
Ich konnte die Gelegenheit ergreifen und die Anwendung auf einem anderen Gerät, leider wieder Symbian, testen. - Das gleiche Verhalten.
Folgende Kernzeilen enthält die Komponente:
---
Enumeration storagedevices = FileSystemRegistry.listRoots();
--- 1. Variante Anfang
while( storagedevices.hasMoreElements() ){
   //Liste alle Speicherorte in einer Form auf
   //hier bekmme ich jedesmal eine Sicherheitsabfrage, ob das Lesen erlaubt werden soll, also alles cool 
}
---1. Variante Ende
---2.Variante Anfang
 FileConnection fc = ( (FileConnection)
        Connector.open("file:///" + storagedevices.nextElement().toString() + "/logfile.txt" );
if(!fc.exists()){
    fc.create();
}
---2. Variante Ende
//Hier liegt das Problem. Die FileConnection wird noch geöffnet, da ich einen Sicherheitshinweis bekomme, ob die Datei gelesen werden darf. Danach kommt die Sicherheitsabfrage, angestoßen durch "exists()". - Diese mit "Ja" beantwortet, schießt das Programm ab. Datei wurde nicht angelegt, Programm geschlossen.

Es kann evtl. sein, kleine Tippfehler im code sind, da ich vergessen habe, das Repository upzudaten komme ich nicht an den Originalcode heran, also seht da bitte drüber hinweg


----------



## Backwardsman (18. Dez 2007)

eins was mir grad noch einfällt... weiß nicht, ob es was bringt, aber übergeb auch einfach mal lese und schreib rechte...


```
FileConnection fc = ( (FileConnection) Connector.open("file:///" + storagedevices.nextElement().toString() + "/logfile.txt", Connector.READ_WRITE);
```


----------



## lol (27. Dez 2007)

Ok, nach ein paar Tagen Abstinenz, weitere Fortschritte und Informationen:

In die Root-Verzeichnisse des Handy-Flashs und der Speicherkarte darf ich nicht nicht schreiben/lesen. Jedoch in die vom Handy erstellten Ordner: documents/music/etc
Selbsterstelle Ordner im Root sind ebenfalls Tabu


----------

