如何在Spring会话中存储每个用户数据?

时间:2012-09-21 15:02:01

标签: java spring spring-mvc

我想为每个登录的用户存储,他的身份在Spring会话中。我做的是:

HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder
.getRequestAttributes()).getRequest();
    HttpSession session = request.getSession(true);

    session.getServletContext().setAttribute("userId", userId); 

当我需要id时,我正在做

 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder
                .getRequestAttributes()).getRequest();  
 HttpSession session = request.getSession();
 Long userId = (Long) session.getServletContext().getAttribute("userId");

第一个用户登录,获取会话ID即可。

第二个用户登录,会话ID被覆盖(我看到因为第一个用户的每个下一个操作,获取第二个用户的用户ID)

实现这一目标的正确方法是什么,显然我不能正确理解会话?

感谢所有建议

3 个答案:

答案 0 :(得分:5)

您将属性存储在ServletContext中,该属性在相同网络应用的所有会话中共享。

您应该将属性存储在HttpSession本身:

session.setAttribute("userId", userId);

然后检索它:

Long userId = (Long) session.getAttribute("userId");

答案 1 :(得分:1)

你在这里没有使用HttpSession,你正在使用ServletContext,顾名思义,这是一个单身人士。

session.setAttribute("userId", userId);

Long userId = (Long) session.getAttribute("userId");

答案 2 :(得分:0)

我更喜欢在HttpSession中保存sessionBean对象... 您可以使用要保留在会话中的数据创建bean

session.setAttribute( “sessionData”,一个sessionBean);