【问题标题】:Managing sessions in Spring 3 MVC在 Spring 3 MVC 中管理会话
【发布时间】:2013-06-11 18:12:51
【问题描述】:

我正在使用 Spring 3 MVC(我对它很陌生...),我需要在用户登录后加载一些数据库信息并保持可用直到用户注销或关闭网页(我可以每次需要时都查询数据库,但效率不高)。 据我所知,这应该通过会话的管理来完成。我找到了以下管理会话数据的教程:

http://richardchesterwood.blogspot.com.es/2011/03/using-sessions-in-spring-mvc-including.html

您认为这是一个好的起点吗?提到的第三个选项是我需要的最佳方法吗? 我应该何时填充需要保留在用户会话中的对象?用户登录的时候可以这样做吗?

我还想知道是否可以保留一些所有用户都应该共有的信息(例如对每个用户都有效的会话)。

非常感谢!!

【问题讨论】:

  • 你也可以在你的控制器上使用@SessionAttributes注解来指明某些模型属性应该被放入Session中。我发现这样做更容易,因为我只需要担心在 Model 中放入一些东西,其余的由 Spring 处理。为了清理事情,我在我的处理程序方法上使用 SessionStatus,并对其执行 .setComplete() ,这会使会话无效。这是一个带有示例的博客文章:fruzenshtein.com/spring-mvc-session
  • 这是一种管理一些会话数据的有趣方式,但是如果您需要管理重量级的类怎么办?我需要知道的是管理重量级课程作为会话数据的最(或几乎)有效的方法。谢谢!!
  • 我不认为该链接是一个好的起点。
  • 当我有一个需要在会话中的类时,我使用上面加上@ModelAttribute。当放置在处理程序方法的属性上时,此注解告诉 Spring 将传入的 HTTP 参数反序列化为适当的对象实例。但是,还有另一个技巧:将 (at)ModelAttribute 放在返回对象实例且不带参数的方法上。在这种情况下,Spring 所做的是调用此方法来创建对象的实例,而模型中不存在对象实例(以及扩展的 Session)。
  • 这是一篇关于如何一起使用提到的两个注释的博客文章:vmustafayev4en.blogspot.com/2012/10/…

标签: java session spring-mvc


【解决方案1】:

我认为该链接不是一个好的起点。它使事情过于复杂。正如文章中建议的那样,通常不需要更改 bean 的范围。事实上,每个请求都实例化一个控制器是非常低效的。将为每个请求创建一个新的对象实例 - 对于可扩展的高性能网站,我真的想不出比这更糟糕的主意了。

Spring security makes it easy。只需拥有一个用户对象,其中包含您实现用户服务返回的相关数据。

无需更改任何范围,保持简单并使用默认的单例(将使缩放更容易)。如果确实需要,请使用会话属性。

【讨论】:

  • 是的,我一开始就是这么想的。我不想在每次请求时都创建一个新实例:我想要的是精确地避免每次都构造该对象,并保留已经加载的数据。谢谢,我会尽快看看spring security。与此同时,我将使用 HttpSession,虽然我知道这并不优雅。
  • 顺便说一句,我什至想进一步:是否有可能让所有用户都可以使用一些数据(对象)?我的意思是,我有一些所有用户共有的静态数据,这些数据是从数据库中加载一次的,每次新用户登录时都不需要查询。有没有办法做到这一点?
  • 拜托,有人知道我的最后一个问题吗?
  • 很简单,只需定义一个 bean,然后在需要的地方注入。
猜你喜欢
  • 2020-12-16
  • 2012-04-30
  • 1970-01-01
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多