如何在整个用户会话期间缓存当前的用户实例,以便我的服务可以自由访问它,而不必去用户访问服务,然后一遍又一遍地从数据库中获取用户数据。
我知道 Spring 支持范围 bean 的概念(每个会话、每个请求等),但老实说,我从未真正使用过它,所以如果有人能告诉我方法,我将非常感激。
我非常希望这种会话范围是线程安全的。
如何在整个用户会话期间缓存当前的用户实例,以便我的服务可以自由访问它,而不必去用户访问服务,然后一遍又一遍地从数据库中获取用户数据。
我知道 Spring 支持范围 bean 的概念(每个会话、每个请求等),但老实说,我从未真正使用过它,所以如果有人能告诉我方法,我将非常感激。
我非常希望这种会话范围是线程安全的。
Spring 并不是万能的解决方案。HttpSession是您所需要的。并且会话范围不是线程安全的。
如果您使用 Spring Security,那么您可以考虑使用增强的 UsersDetails 对象。
- 你只有(因为你只知道你的用例)必须决定这是否有用。
要回答有关 Session Scoped Spring Objects 的问题:
有关示例,请参见Spring 参考第 3.11.4.4 章指定 bean 范围和第 3.4 章。用于范围概述的 Bean 范围(注意该章中 Session 的链接是错误的)。
并注意 Spring Session Scoped Beans 需要该侦听器:
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
IHO:这取决于您将如何处理该会话范围内的数据,您应该使用 Spring Session Beans 还是直接使用 HTTP Session。例如,如果您在服务层的不同位置需要该数据,那么 HTTP 会话可能不是一个很好的解决方案。