1

如何在整个用户会话期间缓存当前的用户实例,以便我的服务可以自由访问它,而不必去用户访问服务,然后一遍又一遍地从数据库中获取用户数据。

我知道 Spring 支持范围 bean 的概念(每个会话、每个请求等),但老实说,我从未真正使用过它,所以如果有人能告诉我方法,我将非常感激。

我非常希望这种会话范围是线程安全的。

4

2 回答 2

2

Spring 并不是万能的解决方案。HttpSession是您所需要的。并且会话范围不是线程安全的

于 2012-02-01T13:10:17.730 回答
0

如果您使用 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 会话可能不是一个很好的解决方案。

于 2012-02-01T13:53:31.793 回答