我想为每个登录的用户存储,他的身份在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)
实现这一目标的正确方法是什么,显然我不能正确理解会话?
感谢所有建议
答案 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);