Spring - Session


How can we put something into a session with Spring?

Use the @SessionAttributes:

package com.in28minutes.login;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;

public class LoginController {

    private LoginService loginService;

    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public String showLoginPage() {
        return "login";

    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public String handleUserLogin(ModelMap model, @RequestParam String name,
            @RequestParam String password) {

        if (!loginService.validateUser(name, password)) {
            model.put("errorMessage", "Invalid Credentials");
            return "login";

        model.put("name", name);
        return "welcome";

Spring documentation states that the @SessionAttributes annotation “list the names of model attributes which should be transparently stored in the session or some conversational storage.” Whatever we put into the model map under the key "name" will be transparently stored into the session under the key "name".

How can we retrieve a value from a session and use it in our controller?

Just add the @SessionAttributes annotation to the controller class:


The above code tells Spring MVC to retrieve the value of the "name" attribute from the session and put it into the model map. The @SessionAttributes tell Spring MVC to marry the specified key in the session with the same key in the model map.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License