首页 > 解决方案 > 如何在 Spring-MVC 中存储 Session 对象

问题描述

我们如何在 http 会话中跨页面存储会话对象(重对象),而不是在不同的并发会话之间共享该会话对象(每个会话的新对象)?

标签: javaspringspring-mvcspring-session

解决方案


默认情况下,如果您将 HttpSession 作为参数传递给 @*Mapping 方法(在控制器中),您将自动获得对当前会话的访问权限。

@RequestMapping(...)
public String someMethod(HttpSession session) {
    // you have access to the session here
}

您可以使用HttpSession.setAttribute(String, Object)在会话中存储对象

但是如果你想访问所有会话,因为每个会话都会自动创建一个线程,你必须将它存储在一个静态变量中。在这种情况下,我假设您正在寻找地图,以便您可以通过会话 ID 识别会话:

static Map<String, HttpSession> connectedUsers;

使用会话 id ( HttpSession.getId()) 作为键和HttpSession值,您应该能够自由访问不同的会话。


推荐阅读