[Tutorial] Sessions mit Spring nutzen

Heute habe ich mich gefragt, wie man Sessions mit Spring in Java nutzen kann und mit etwas Recherche erfahren, dass es in Spring um einiges einfacher ist, als ich anfangs gedacht habe. Auf die Maven Konfiguration werde ich hier nicht genauer eingehen.

 

Was ist eine Session?

Session heißt übersetzt “Sitzung” und ist auch wortwörtlich eine. Jedem User wird dabei eine eindeutige ID zugeordnet und als Cookie gespeichert und der Server weiß somit, dass es sich beim nächsten Seitenaufruf immer noch um den selben User handelt. Was nach Tracking klingt ist fürs moderne Web unentbehrlich! Wenn der Server nicht wüsste, dass es sich um den selben User handelt, wüsste er auch nicht, ob der User eingeloggt ist oder wie sein Benutzername lautet, man müsste sich also ohne immer auf jeder Seite neu einloggen! Damit kommen wir auch gleich zum nächsten Punkt:
Während der Client nur die sessionID besitzt, kann man auf Serverseite Daten zu dem User (z.B. userID, Username, Flag ob er eingeloggt ist usw.) speichern, die der Client nicht manipulieren kann. Ein Hacker könnte höchstens versuchen, die sessionID per Cookie zu manipulieren und eine richtige sessionID herauszufinden (sog. Session Hijacking), allerdings ist dies nicht so einfach möglich, wie es sich anhört, da die ID keine Zahl, sondern meist ein Hash ist. Diese wird übrigens erstellt, sobald der User entweder die Seite zum ersten Mal aufruft oder die alte Session abgelaufen ist (z.B. kann eine Session nur 15 Minuten gültig sein, damit ein Benutzer automatisch ausgeloggt wird, sobald er 15 Minuten nicht aktiv ist).

Mit Spring Sessions arbeiten

In Spring kann man Sessions sehr einfach nutzen. In diesem Beispiel habe ich einmal einen Controller für die Index Seite angelegt:

 

Die Annotation @Controller über dem Klassennamen bedeutet, dass es sich um einen Seiten Controller handelt (MVC Prinzip), den Spring beachten soll.

Die Methode index() wird aufgerufen, wenn die Seite “/”, also z.B. “example.com” oder “example.com/” (in diesem Fall die Startseite) aufgerufen wird. Das haben wir in der Annotation @RequestMapping(value = “/”, method = RequestMethod.GET) festgelegt.

 

Kommen wir nun aber zum interessanterem Teil:

Die Methode besitzt den Parameter HttpSession session. Spring schaut vorher nach (per Dependencie Injection), welche Parameter die einzelnen Methoden erwarten und übergibt diese dann der Methode. Die Session an sich erstellt Spring von selbst, auch ohne diesen Paramter, aber mit können wir sie nutzen. Jetzt können wir Key-Value-Paare (vergleichbar mit einer Java Map<String,Object>) für eine Sitzung speichern. Wir können also Attribute zu einer Session hinzufügen, ändern oder löschen.

 

Mit

können wir ein Session Attribute hinzufügen oder ändern (überschreiben).

 

Hier lesen wir den Wert des Attributes “keyname” aus. Da diese vom Typ Object sind, wir aber den gespeicherten String erhalten wollen, müssen wir das Object zu einem String casten.

 

Mit diesem Code könnt ihr letzendlich noch ein Attribut wieder löschen.

 

Fragen & Anregungen könnt ihr wie immer wieder in die Kommentare schreiben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.