我正在学习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并设置必须用于加密的密钥?
答案 0 :(得分:0)
我认为你不能直接告诉spring / web app将会话数据存储到cookie。
为了达到您的要求,您需要执行以下操作
为每个要存储的数据创建每个cookie,然后将cookie添加到响应
Cookie c = new Cookie("sessionid", sessionid);
res.addCookie(c);
并从请求中读取Cookie数据
Cookie[] cookies = req.getCookies();
在这种情况下,您也可以完全控制加密。
自动化此过程意味着将会话数据同步到cookie,您将能够编写方面处理程序。