在会话范围的变量中缓存当前用户数据

时间:2012-02-01 13:07:39

标签: java spring session-scope

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

我知道Spring支持scoped bean的概念(每个会话,每个请求等),但老实说,我从来没有真正使用过它,所以如果有人能给我指路,我会非常感激。

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

2 个答案:

答案 0 :(得分:2)

Spring并不是解决所有问题的方法。 HttpSession是您所需要的。并session scoping is not thread-safe

答案 1 :(得分:0)

如果使用Spring Security,则可以考虑使用增强的UsersDetails对象。

- 你只是(因为你只知道你的用例)必须决定这是否有用。


回答有关Session Scoped Spring Objects的问题:

有关示例,请参阅Spring Reference Chapter 3.11.4.4 Specifying bean scope和第3.4章。范围概述的Bean范围(关注该章节中链接的链接是错误的)。

请注意,Spring Session Scoped Beans需要听众:

<listener>
   <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
 </listener>

IHO:这取决于你将对会话作用域数据做什么,你是否应该直接使用Spring Session Beans或HTTP Session。例如,如果您需要服务层内不同位置的数据,那么HTTP会话可能是一个不太好的解决方案。