[英]How to maintain user object throughout the application using session in java
我正在编写一个应用程序,因为我正在将用户对象设置为会话,而我无法将该会话导入另一个控制器。 我想在整个应用程序中维护该会话(直到用户注销)。 因此,如何将会话对象放入另一个控制器以及整个应用程序中。 我需要遵循哪些步骤来维护整个应用程序中的会话。
进入会话:
public ResponseEntity<Object> getCustMenus(HttpSession session){
UserInformation userInformationSession = luser.getRolesData();
session.setAttribute("userInfo", userInformationSession);
}
获取会话:
UserInformation userInformation=(UserInformation) session.getAttribute("userInfo");
System.out.println("-----"+userInformation.getUserName()+"----------username");
我遇到了您的问题,因为我也面临着同样的问题。 我认为我们可以依靠Tomcat的请求处理机制-每个请求都在单个线程中运行。
所以我可以有
网址设置为/ *的过滤器,这意味着每个请求都将通过此过滤器。 过滤器会将当前线程和请求对象添加到静态映射。
map.put(Thread.currentThread(), httpRequest);
由于映射是某个类的静态字段,因此所有线程都可以访问该映射,并且如果需要通过请求的生命周期在不同控制器之间共享对象,则可以将其放入此映射中,例如,将httpsession作为属性并获取它在您想要的任何地方。
在过滤器中,完成请求后,从映射中删除线程。
map.remove(Thread.currentThread());
如果我们使用WeakHashMap,我想我们可以跳过第3步。
我还没有尝试过这种方法,但是我认为它应该有效。 尝试时,我将分享结果。
我在另一个讨论中找到了完整的答案。 从Java代码获取HttpServletRequest(请求)对象
对我来说,讨论中最有用的部分是skaffman发布的。 请在下面找到它。
Spring为此提供了RequestContextFilter 。 它使用ThreadLocal,并允许代码通过RequestContextHolder获取当前请求。 请注意,此过滤器不需要您使用Spring的任何其他部分:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.