Problem mit mehreren Anmeldungen bei einer Webanwendung

Kamikatze

Captain
Registriert
Okt. 2004
Beiträge
3.708
Hey ihr!

Ich habe, wie der Titel schon besagt, ein recht unangenehmes Problem mit meinem Webprojekt mit mehreren Verbindungen.

Also zuerst einmal der Ablauf der Seite:
  1. Laden der Seite - Anmeldefeld (Benutzername + Passwort) erscheint
  2. Anmelden am System - User wird in einer Servlet-Variable gespeichert
  3. Aufruf einer anderen Seite, die den User ausliest und dessen Daten anzeigt

Das ursprüngliche Problem war, dass ich bei der Anmeldung eine NullPointerException bekam, wenn ich nach dem Laden der Seite (noch vor der Anmeldung) noch einmal aktualisiert habe. Das User-Objekt, das gespeichert wird, ist dann nämlich (aus bisher noch nicht bekannten Gründen :( - vermutlich ein Problem mit der Session) nicht mehr vorhanden.

Also habe ich nun versucht diese Objekte in diesem Servlet (Backbone.java) als static zu deklarieren, damit sie auch sicher dauerhaft gespeichert werden.

So weit so gut, man konnte nun aktualisieren so oft man wollte, der User blieb erhalten. Auch war man danach nicht plötzlich wieder als der User zuvor angemeldet, wenn man sich inzwischen ab- und neu angemeldet hat.

Doch das dadurch entstandene Problem ist noch um einiges schlimmer.

Dass static-Variablen bis zum Ende des Programmes gelten - weil sie zur Klasse und nicht zur Instanz gehören - wusste ich natürlich schon, was ich nicht wusste ist, dass diese eine Variable von allen Verbindungen gemeinsam genutzt wird, ich war mich doch recht sicher, dass diese Variablen doch zumindest für jede Server-Verbindung (und somit für Benutzer) eigens existieren.

Tja... Tatsache ist aber, dass wenn sich nun jemand von einem anderen Rechner anmeldet und ein zweiter auf der Anmelde-Seite den Aktualisieren-Button im Browser betätigt, dieser dann auch angemeldet ist.


Tomcat 6.0
Java 1.5 (Source Level) + ZK 2.4.1 Freshley


Mit Quellcode möchte ich jetzt gleich im Eröffnungspost nicht gleich um mich werfen.
Hat jemand irgendwelche Tipps? Kann das richtig sein mit den static-Variablen?

Bin für jede Hilfestellung, die zur Erfassung des Täters führen, sehr dankbar.


Falls es trotzdem jemanden interessieren sollte - das ganze Projekt ist hier einsehbar. Der Kern des Systems ist Backbone.java, das auch zur Anmeldung am System dient. Im aktuell hochgeladenen Source sind die Variablen nicht als static deklariert.
 
Zuletzt bearbeitet:
So, das Problem ist inzwischen endlich gelöst (ganz ohne static-Variablen) - nach monatelanger Bekanntheit und tagelanger Suche bzw. nach Bekanntwerden stundenlangen Versuchen, das Problem zu beheben und vielen neuen Erfahrungen und Erkenntnissen... :)

Das Problem war, wenn die Seite neu geladen wurde, wurde auch das Servlet neu erstellt, d.h. es war zwar schon ein Backbone-Objekt in der Session gespeichert (if-Abfrage), dann wurde allerdings mit den nicht initialisierten Klassenvariablen fortgefahren... hat man z.B. aktualisiert, während man eingeloggt war, blieb dieser Zustand für immer gespeichert, d.h. nach Ausloggen und Aktualisieren war man wieder eingeloggt etc.

Ich habe jetzt alle Variablen/Objekte, die auch in der Session gespeichert sind, komplett aus der Klasse entfernt.

Ein weiterer Fehler:
Bisher wurde die ganze Backbone-Klasse in der Session gespeichert. Manche Elemente werden aber beim Neuladen der Seite neu generiert und müssen auch wieder neu zugewiesen werden (alle Seitenobjekte sind auch gleichzeitig Java-Objekte).

Was mich aber trotzdem noch interessieren würde ist, ob sich wirklich alle Benutzer eine einzige static-Variable teilen müssen oder nur alle Objekte eines Benutzers... mir kommt das so nicht ganz richtig vor.
 
Zurück
Oben