gpt4 book ai didi

java - Spring MVC 3.0 访问 session 变量

转载 作者:行者123 更新时间:2023-11-29 06:18:55 25 4
gpt4 key购买 nike

我有以下问题,我已经配置了以下应该存储在 session 中的类。

<bean id="Users" class="com.doolloop.DlUser" scope="session">
<aop:scoped-proxy/>
</bean>

然后我想在我的 Dispatcher servlet 中访问此类用户并设置

@RequestMapping(value="/authenticate.do",method = RequestMethod.POST)
public String sampleAuthentication(@Valid Person person, BindingResult result,
Map model,HttpServletRequest request){
...... /some code
HttpSession session = request.getSession();
DlUser user = (DlUser) session.getAttribute("Users");
/// some uses for user object

}

问题是我总是得到用户对象的空值。

我做错了什么?

第二个问题,我在文章中读到访问HttpSession 不是线程安全的,如何才能安全地完成?应该是那种Singleton?为什么这不是线程安全操作?

提前谢谢你。

丹尼。

最佳答案

这是一种特殊情况,当您想要将具有较短作用域的 bean 注入(inject)具有较长作用域的 bean(即,将 session 作用域的 bean 注入(inject)单例作用域的 bean)

您可以使用查找方法:

<bean id="yourSingletonBean"
class="your.singleton.BeanClass">
<lookup-method name="getDLUser" bean="Users"/>
</bean>

您需要使您的单例 bean 抽象,并创建一个抽象方法public DLUser getDLUser()

然而,这并不是一个完美的解决方案。我们的想法是尽可能少地举行 session 。如果你不需要在session中存储一个bean,而只存储当前用户,你可以很方便地在用户登录时调用session.setAttribute(..),然后访问当前用户使用 session.getAttribute(..),用户根本不是一个 bean。

我为应用程序中的当前用户选择的一种方法是创建自定义 @SessionAttribute 注释。参见 this question关于如何实现这一目标。

关于java - Spring MVC 3.0 访问 session 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3993043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com