【问题标题】:Maintain same session in spring controller在 spring 控制器中保持相同的会话
【发布时间】:2013-03-19 19:36:44
【问题描述】:

我有两个控制器 UserSignInController 和 PageNavigationController。我想在两个控制器中维护相同的 HttpSession,但我在 diff 页面中找到了一个 diff 会话。我还在控制器页面中添加了 @SessionAttributes("userDetails")。请告诉我如何我创造了这个?

用户登录控制器

@RequestMapping(value="/analyzeinternet1.html", method=RequestMethod.GET)
    public ModelAndView getSocialMediaAdmin(HttpSession session, Model model) {
        LOG.info(" session..." + session);
        ModelAndView mv = null;

        UserProfile up = (UserProfile) session.getAttribute("userDetails");
        if(up == null) { //Checking whether the user is already signed up or not. If not, the user is redirected to login page. 
            LOG.info("No user in session...");
            mv = new ModelAndView("redirect:/login.html");
        } else {
            LOG.info("User in session..." + up);
            mv = new ModelAndView("internetanalyze");
            model.addAttribute("userDetails", up);
            session.setAttribute("userDetails", up);
            mv.addObject("clientId", up.getUserId());
        }

        LOG.info(mv);
        return mv;
    }

页面导航控制器

@RequestMapping(value="/analyzeinternet.html", method=RequestMethod.GET)
    public ModelAndView getAnalyzeInternet(HttpSession session, Model model) {
        LOG.info("-----session..." + session);
        //LOG.info("-----userprofile..." + userDetails);
        ModelAndView mv = null;
         up = (UserProfile) session.getAttribute("userDetails");
            LOG.info("User in session..." + up);
            mv = new ModelAndView("internetanalyze");
            //mv.addObject("clientId", up.getUserId());
            return mv;
    }

两个会话 id 不同,我的重定向代码是

<a href="<%=request.getContextPath()%>/analyzeinternet.html">

【问题讨论】:

  • 你能告诉我你发现了什么不同吗?据我所知,所有的控制器都是单例的,所以会话跨控制器是没有问题的。

标签: java session spring-mvc


【解决方案1】:

您的意思是您从一页浏览您的应用程序到第二页,而第二页使用 PageNavigationController 您没有获得相同的会话?你如何检查它是否不是同一个会话?您确定在会话中设置 userDetails 吗?

还要检查会话 cookie 是否在请求中正确传递。您可以使用 firebug 或 chrome 控制台检查响应和请求标头中的 cookie 值。

【讨论】:

  • 我有打印会话,它得到了差异值。是的,我已经在会话中设置了用户配置文件
  • 请调试会话cookie并确认
  • 它在控制台中给出了不同的会话 ID
【解决方案2】:

我找到了答案。这段代码写在context.xml中

<Context path="/sm" docBase="sm"
        debug="5" reloadable="true" crossContext="true" cookies="false">

其中 cookies="false" 应该是 cookies="true"。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-19
    • 2014-01-18
    • 2017-06-15
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    相关资源
    最近更新 更多