用于存储会话数据的加密cookie

时间:2012-07-24 13:40:18

标签: spring spring-mvc spring-security

我正在学习Spring MVC,但我无法理解会话数据的存储位置和方式。

我想要实现的是将会话数据存储在发送到浏览器的加密cookie中。这是必要的,因为我计划在没有粘性会话的heroku上运行应用程序。 (这是我已经使用python的解决方案,通过使用金字塔和烧杯,我很满意它)

我有这个玩具控制器

public class HelloController implements Controller {

    protected final Log logger = LogFactory.getLog(getClass());

    public ModelAndView handleRequest(HttpServletRequest request,
                                      HttpServletResponse response)
            throws ServletException, IOException {

        logger.info("Returning hello view");

        Map<String, Object> myModel = new HashMap<String, Object>();
        myModel.put("key", "value");

        return new ModelAndView("hello", "model", myModel);
    }
}

如果我致电

会怎样?
        HttpSession session = request.getSession();
在handleRequest方法中

?我认为会话是在不存在的情况下启动的,否则返回现有的会话。但是这个会话存储在哪里?在带有cookie的浏览器中?或者在其他地方?

如何指定必须将会话放入cookie并设置必须用于加密的密钥?

1 个答案:

答案 0 :(得分:0)

我认为你不能直接告诉spring / web app将会话数据存储到cookie。

为了达到您的要求,您需要执行以下操作

  1. 为每个要存储的数据创建每个cookie,然后将cookie添加到响应

    Cookie c = new Cookie("sessionid", sessionid);
    res.addCookie(c);
    
  2. 并从请求中读取Cookie数据

    Cookie[] cookies = req.getCookies();
    
  3. 在这种情况下,您也可以完全控制加密。

    自动化此过程意味着将会话数据同步到cookie,您将能够编写方面处理程序。