web-dev-qa-db-fra.com

Gestion des sessions au printemps MVC

Je suis nouveau sur Spring MVC et j'ai commencé à faire un exemple d'application en faisant ce que j'ai appris. Je prévois d'implémenter la gestion des sessions au printemps MVC. J'ai trouvé ceci un utile.

Mais je ne peux pas le comprendre clairement. Nous ajoutons des valeurs à la session comme

HttpSession session = request.getSession(false);
session.setAttribute("key", value);
session.setAttribute("key1",  value1);

et plus tard, nous récupérons des valeurs basées sur les clés comme

session.getAttrubute("key");

mais au printemps MVC, je ne pouvais rien voir de semblable et cela me confond totalement.

@Controller
@SessionAttributes("thought")
public class SingleFieldController {

    @RequestMapping(value="/single-field")
    public ModelAndView singleFieldPage() {
        return new ModelAndView("single-field-page");
    }

    @RequestMapping(value="/remember")  
    public ModelAndView rememberThought(@RequestParam String thoughtParam) {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("thought", thoughtParam);
        modelAndView.setViewName("single-field-page");
        return modelAndView;
    }

}

Dans le code ci-dessus, @SessionAttributes("thought") me confond complètement comme qu'est-ce que c'est thought défini aussi je n'ai pas besoin de retourner un ModelAndView puisque j'utilise backbone.marionette.js

Alors, comment puis-je définir des valeurs dans une session et les utiliser chaque fois que nécessaire? Je dois également convertir l'objet de session en mon objet défini par l'utilisateur car, tout en renvoyant les valeurs à l'écran, je ne renvoie qu'une liste d'objets définis par l'utilisateur qui sont disponibles dans la session.

Aidez-moi donc à mieux le comprendre. Peut-être que je suis confus avec la façon dont j'ai utilisé jsp/servlet.

[~ # ~] mise à jour [~ # ~]

Voici le contrôleur que j'ai et a fourni des commentaires

package com.hexgen.puppet;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.SessionAttributes;

import com.hexgen.puppet.CreatePuppet;

import Java.util.ArrayList;
import Java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

@Controller
public class PuppetService {

    @RequestMapping(method = RequestMethod.POST, value = "/create")
    public @ResponseBody
    void createOrder(@RequestBody CreatePuppet request) {
        //logic to add/update values in session
    }

    @RequestMapping(method = RequestMethod.GET, value = "/list")
    public @ResponseBody
    List<Puppet> getGroups() {
        //logic to retrive objects from session and convert it as List and send it back

        return puppets;
    }


}

et convertir l'objet si nécessaire et continuer

13
Java Questions

@SessionAttributes ne remplace pas entièrement le traditionnel HttpServlet gestion de session. Utilisez-le si deux méthodes de contrôleur ou plus doivent communiquer certaines données. Mais, en utilisant cela, nous ne pouvons réaliser la communication qu'au sein d'une seule classe de contrôleur. Vous n'utilisez pas pour lire et écrire de et vers la session explicitement si vous utilisez @SessionAttributes. L'utilisation de @SessionAttributes est suggéré uniquement pour les communications de courte durée. Si vous avez besoin de stocker des données à long terme en session, il est suggéré d'utiliser session.setAttribute et session.getAttribute explicitement, au lieu de @SessionAttributes. Pour plus d'informations vérifiez ceci .

14
Vaibhav Raj

Vous pouvez gérer la gestion de session dans springmvc comme ceci. voici une méthode de contrôleur

@RequestMapping(value = { "/login" }, method = RequestMethod.POST)
@ResponseBody
public String login(HttpSession session,String username,String password) throws Exception {
    Member member=userService.authenticateUser(username, password);
    if(member!=null) {
        session.setAttribute("MEMBER", member);
    } else {
        throw new Exception("Invalid username or password");
    }
    return Utils.toJson("SUCCESS");
}

l'utilisateur transmettra le nom d'utilisateur et le mot de passe tandis que Spring injectera automatiquement l'attribut de session. nous authentifierons ce nom d'utilisateur et ce mot de passe à partir de db. Pour cela, nous utiliserons une méthode de service qui appellera à son tour une méthode de référentiel pour obtenir la classe Object of Member et la retourner ici dans le contrôleur. Partout où dans votre méthode d'application vous avez besoin des informations conservées dans la session, passez-les dans l'argument au gestionnaire. Vous pouvez trouver plus de détails sur la façon dont ces informations peuvent être vérifiées à chaque appel de méthode à http://faisalbhagat.blogspot.com/2014/09/session-management-with-spring-mvc.html

11
faisalbhagat