JAVA - Properties Datei mit Userdaten

Destruction

Mitglied
Moin Moin,

ich habe einen hash den ich zum einloggen für einen Webservice brauche.
Diesen möchte ich gerne irgendwo abspeichern beim client.

Die Frage ist... wo gehört sowas hin?

1. Außerhalb der JAR-Datei?
2. Was ist der beste Weg um "dort" hinzuschreiben?

Habe eben die ganze Zeit rumgebastelt um zu probieren innerhalb vom Classpath eine Datei zu verändern aber da kriege ich ständig einen Fehler dass der Pfad nicht stimmt...

Selbst wenn das irgendwie klappen sollte und der bessere Weg wäre, wäre es nett wenn mir auch einer sagen könnte wie ich das am besten außerhalb speichere...

Vielen Dank schonmal!

Danke
Lg

Java:
URL url = Main.class.getResource("/config/config.properties");
			
			System.out.println(url.getFile());
			Properties p = new Properties();
			p.setProperty("Test", "wert");
			
			try {
				p.store(new FileOutputStream(url.getFile()), "Important-->");
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
[WR]java.io.FileNotFoundException: file:\C:\XX\Desktop\test.jar!\config\config.properties (Die Syntax f³r den Dateinamen, Verzeichnisnamen oder die Datentrõgerbezeichnung ist falsch)[/WR]
 
Einen hash den ich zum einloggen für einen Webservice

Echt? Ein Hashwert verwendet man, um bei einem vorgelegten Klartext (z.B. das Passwort) zu überprüfen, ob dieses richtig ist. Dann wird der hash(klartext) mit dem gespeicherten Hashwert verglichen. Zum Einloggen macht das dann wenig Sinn, weil diese Überprüfung der Server machen muss.

Aber vielleicht habe ich auch was falsch verstanden???:L

Zu Deinem Problem mit der properties-Datei. Ich schlage vor, mal sich die Preferences-API anzuschauen. Diese ist recht einfach einzusetzen und macht alles Umgebungs-Spezifische intern und Du musst Dich nicht drum kümmern, einfach Lesen/Schreiben.

Wenn Du trotzdem properties-Dateien einsetzen möchtest, ist es wichtig zu wissen, ob Du da schreiben möchtest. Dies geht innerhalb von JAR-Dateien nämlich nicht oder nur sehr schwer. Also dann ausserhalb des JARs.

Aber wie schon anregte: java.util.prefs.Preferences
 
Echt? Ein Hashwert verwendet man, um bei einem vorgelegten Klartext (z.B. das Passwort) zu überprüfen, ob dieses richtig ist. Dann wird der hash(klartext) mit dem gespeicherten Hashwert verglichen. Zum Einloggen macht das dann wenig Sinn, weil diese Überprüfung der Server machen muss.

Aber vielleicht habe ich auch was falsch verstanden???:L

Zu Deinem Problem mit der properties-Datei. Ich schlage vor, mal sich die Preferences-API anzuschauen. Diese ist recht einfach einzusetzen und macht alles Umgebungs-Spezifische intern und Du musst Dich nicht drum kümmern, einfach Lesen/Schreiben.

Wenn Du trotzdem properties-Dateien einsetzen möchtest, ist es wichtig zu wissen, ob Du da schreiben möchtest. Dies geht innerhalb von JAR-Dateien nämlich nicht oder nur sehr schwer. Also dann ausserhalb des JARs.

Aber wie schon anregte: java.util.prefs.Preferences

Moin Moin,

nene ... der Hash ist einfach eine alternative zum Login den will ich nur für meine Webservices verwenden damit ich keine Userdaten hin und her schicken muss... der Hash steht dann im userbereich auf der Webseite.

Darum gehts aber auch nicht 😀 danke trotzdem.

Ja preferences kenne ich schon... hätte aber gerne eine Properties datei gehabt...
Ja möchte ich diese Datei auch schreiben können :-( Genau da liegt leider das Problem.

Was ist dann der beste Weg dafür ?
Vielen dank für deine Hilfe !

Lg
 
Ich verstehe das Problem nicht...

Wie ich schon sagte, sollte die Properties-Datei ausserhalb der JAR-Datei liegen. Dieses tut sie bei mir und folgendes Programm funzt ohne Probleme. Du musst natürlich darauf achten dass der Classpath das Directory enthält in dem sich auch der Ordner config befindet.
Java:
	URL url = Main.class.getResource("/config/config.properties");
        
        System.out.println(url.getFile());
        Properties p = new Properties();
        p.setProperty("Test", "wert");
        
        try {
            p.store(new FileOutputStream(url.getFile()), "Important-->");
	    Object object = p.get("Test");
	    System.out.println(object);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 
@TO
wenn du daten SCHREIBEN willst MUSS das props-file außerhalb des jar liegen ... denn das aktuell laufende jar kannst du nicht modifizieren ... zumindest nicht ohne das die VM mit nem cirtical error abstürzt ...

preferences stellen eine ausweichmöglichkeit dar und kümmern sich bei sowas auch um die richtigen orte (unter windows wird die registry genutzt) ...

aber grundsätzlich sollte dein props-file irgendwo unter user.home liegen ... denn dort hast du definitiv schreibrechte
 
Ich verstehe das Problem nicht...

Wie ich schon sagte, sollte die Properties-Datei ausserhalb der JAR-Datei liegen. Dieses tut sie bei mir und folgendes Programm funzt ohne Probleme. Du musst natürlich darauf achten dass der Classpath das Directory enthält in dem sich auch der Ordner config befindet.
Java:
	URL url = Main.class.getResource("/config/config.properties");
        
        System.out.println(url.getFile());
        Properties p = new Properties();
        p.setProperty("Test", "wert");
        
        try {
            p.store(new FileOutputStream(url.getFile()), "Important-->");
	    Object object = p.get("Test");
	    System.out.println(object);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


Bei dem Programm liegt die config datei bei mir nicht außerhalb...?? Sondern innerhalb der Jar ( siehe Fehlermeldung ) er versucht da in die jar reinzugehen?! Und das soll er bei dem code ja auch.
Entweder ich mache nen Gedankenfehler oder wir reden aneinander vorbei...

Zu meiner eigentlichen Frage:
Ich dachte halt es wäre praktisch dann wenigstens ins selbe Verzeichnis zu schreiben wo auch die jar datei liegt...
Oder macht es mehr Sinn das wirklich ins user.home verzeichnis zu schreiben?(siehe tröööt)

Dankeschön!

Lg
 
grundsätzlich : du kannst aus dem gerade aktiven JAR nur lesen ... aber nicht hinein schreiben
zusätzlich : man kann NICHT mit File() auf daten in einem jar zugreifen .. dafür gibt es ClassLoader.getResource() und ClassLoader.getResourceAsStream() ...

und ja : es ist besser in user.home zu schreiben ... denn hier hat man defintiv schreibrechte ...
wenn deine app also wo anders "installiert" ist kann es zu zugriffs-fehlern kommen ... und wenn man die nicht abfängt oder dafür sorgt das sie nicht mehr auftreten funktioniert es halt nicht
 
grundsätzlich : du kannst aus dem gerade aktiven JAR nur lesen ... aber nicht hinein schreiben
zusätzlich : man kann NICHT mit File() auf daten in einem jar zugreifen .. dafür gibt es ClassLoader.getResource() und ClassLoader.getResourceAsStream() ...

und ja : es ist besser in user.home zu schreiben ... denn hier hat man defintiv schreibrechte ...
wenn deine app also wo anders "installiert" ist kann es zu zugriffs-fehlern kommen ... und wenn man die nicht abfängt oder dafür sorgt das sie nicht mehr auftreten funktioniert es halt nicht

Alles klar!
Danke für deine Hilfe 🙂
 

Zurück
Oben