HttpSession bekommen wenn nicht in Servlet

Status
Nicht offen für weitere Antworten.

bense

Mitglied
Hallo zusammen

Ich habe ein Servlet. In der Session speichere ich die Login-Informationen. Nun benötige ich diese Daten in einem Objekt, das keinen Zugriff auf das Servlet und die Session hat. Die Session überall hin mitgeben möchte und kann ich nicht.

Meine Überlegung war, dass ich bei jedem POST-/GET-Request die Session in ein Singleton speichere und dann ja überall Zugriff darauf habe. Jetzt ist mir jedoch eingefallen, dass ja dieses Singleton für alle Benutzer da ist und somit unter Umständen wenn 2 Requests gleichzeitig laufen der eine Benutzer die Credentials des anderen bekommt.

Ich habe im Netz (und hier) nach einer Lösung gesucht, aber entweder ich habe falsch gesucht, niemand hat das Problem oder die Lösung ist sonnenklar und ich sehe sie im Moment nicht. Kann mir jemand sagen, wie man das sicher bewerkstelligt?

Vielen Dank und Gruss
Ben
 
M

maki

Gast
Die HttpSession mitzugeben ist keine gute Idee, denn dadurch wird der Code abhängig davon.

Welche Daten benötigst du denn genau?
 

bense

Mitglied
Ich benötige das Credential-Objekt des Benutzers welches in der Session gespeichert ist. Aber grundsätzlich spielt es ja keine Rolle, was für Daten es sind, oder?
 

bense

Mitglied
Also du meinst in meinem Singleton nur ThreadLocal-Vars verwenden? Da jeder Request einen eigenen Thread hat, hat das dann zur Folge, dass jeder Benutzer quasi "seine eigene Instanz des Singletons" hat und die Credentials niemals von einem anderen User benutzt werden können?

Ich möchte nur sichergehen, dass ich das richtig verstanden habe. Sicherheit ist ja schliesslich ein heikles Thema...
 
M

maki

Gast
Kein Singleton.

Sondern die Daten die du brauchst an den Thread hängen.
 

bense

Mitglied
Hmmm, ich muss mich wohl mal etwas damit beschäftigen, habe das noch nie benutzt und weiss nicht genau wie das funktioniert.

Auf jeden Fall Danke!
 

bense

Mitglied
Ich möchte hier gerne nochmals nach haken. Ich habe folgendes beobachtet:
Wenn ich nacheinander 2 Requests vom gleichen Browser auf das Servlet mache, ist es in einigen Fällen so, dass ich bei beiden Requests den gleichen Thread (überprüft mit Thread-ID) bekomme. Somit kann ich dann natürlich auch die ThreadLocal-Vars lesen.

Das lässt bei mir Zweifel aufkommen...GARANTIERT mir das Servlet, dass 2 verschiedene Benutzer bei je einem Request nicht den gleichen Thread bekommen? Sonst wäre die Sache nicht tauglich...
 

bense

Mitglied
Hmm, habe mir das Ganze nochmals überlegt. Ich bin ja selbst dafür verantwortlich. Wenn ich sicherstellen kann, dass in jedem Fall (auch bei evtl. irgendwo auftretenden Fehlern) die ThreadLocal-Vars bei jedem Request gesetzt werden, besteht kein Problem. Das Problem entsteht erst, falls ein anderes Servlet im Container die Vars nicht initialisiert oder irgendwo ein Fehler auftritt welcher die Initialisierung verhindert. Dann hat der Nutzer evtl. die Credentials vom Vorgänger.

Ist zwar auch nicht so ganz sauber, man möchte ja immer auf der sicheren Seite sein, auch falls etwas schief läuft. Aber mir fällt keine andere Lösung ein. Falls jemand eine bessere sieht, wäre ich froh...

Gruss Ben
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben