20 Session Handling in Spring

Spring bietet umfangreiche Unterstützung für das Session Handling in Webanwendungen, um Zustände über HTTP-Request-Grenzen hinweg zu verwalten. Dies ist besonders nützlich in Szenarien, wo eine Anwendung stateful Interaktionen mit dem Benutzer über mehrere Requests hinweg benötigt. Hier sind einige der Mechanismen, die Spring zur Unterstützung des Session Handlings anbietet:

20.1 HttpSession

Spring Web MVC integriert sich nahtlos mit dem Standard-Session-Management-Mechanismus von Servlets, der HttpSession. Sie können eine HttpSession in Controller-Methoden injizieren lassen, um Benutzerdaten über Requests hinweg zu speichern oder zu lesen.

20.1.1 Beispiel für HttpSession:

@GetMapping("/addSession")
public String addSessionData(HttpServletRequest request) {
    HttpSession session = request.getSession();
    session.setAttribute("meinAttribut", "Ein Wert");
    return "sessionDataAdded";
}

@GetMapping("/readSession")
public String readSessionData(Model model, HttpSession session) {
    String sessionData = (String) session.getAttribute("meinAttribut");
    model.addAttribute("sessionData", sessionData);
    return "sessionDataView";
}

In diesem Beispiel wird im ersten Handler-Methode ein Wert in der Session gespeichert und im zweiten Handler-Methode gelesen.

20.2 Spring Session

Spring Session ist ein Projekt, das darauf abzielt, das Session Management in Spring Anwendungen zu vereinfachen und zu erweitern. Es bietet eine API und Implementierungen für die Verwaltung von Benutzersessions in einer verteilten Umgebung. Spring Session unterstützt verschiedene Datenspeicher zur Session-Persistenz, darunter Redis, MongoDB, JDBC, und Hazelcast, wodurch Sessions in Microservices-Architekturen konsistent gehalten werden können.

20.2.1 Vorteile von Spring Session:

20.3 @SessionAttribute und @SessionAttributes

In Spring MVC können Sie die Annotationen @SessionAttribute (für einzelne Attribute) oder @SessionAttributes (für Model-Attribute in einem Controller) verwenden, um spezifisch anzugeben, welche Attribute in der Session gespeichert und über Requests hinweg verfügbar sein sollen.

20.3.1 Beispiel für @SessionAttributes:

@Controller
@SessionAttributes("meinAttribut")
public class MeinController {

    @ModelAttribute("meinAttribut")
    public String setupForm() {
        return "Initialer Wert";
    }

    @PostMapping("/update")
    public String update(@ModelAttribute("meinAttribut") String meinAttribut) {
        // Aktualisiert das Attribut "meinAttribut"
        return "updateView";
    }
}

In diesem Controller wird meinAttribut über die Session geteilt und kann in verschiedenen Requests modifiziert werden.