Java Spring MVC。这可以通过调用“new”来覆盖单例(或会话)作用域bean吗?

时间:2015-08-23 15:28:39

标签: java spring spring-mvc session javabeans

我正在通过尝试创建一个简单但功能强大的网页来学习Spring MVC框架。

我想知道是否可以通过调用“new”运算符来覆盖会话bean ...

我创建了会话范围的bean,它引用了当前用户。如果未记录用户,则默认bean将与guest参数一起使用。

<bean id="currentUser" class="pl.home.models.User" scope="session"> <aop:scoped-proxy /> </bean>

然后,在我的控制器中,我将代码放在下面:

@Autowired @Qualifier("currentUser") protected User user;

当用户尝试登录时,我想通过调用:

来覆盖用户的实例

user = new User(email, password);

以上代码将仅“本地”覆盖用户实例。 Spring容器中bean的实例将保持不变。

是否可以覆盖Spring容器中的用户实例?或者也许我的方法完全错了?

谢谢,Mariusz

1 个答案:

答案 0 :(得分:1)

基本上我通过Java EE HttpSession解决它你可以使用相同的方法。用户登录成功后,创建一个currentUser对象并将其设置为HttpSession,如下所示:

public void loginPost(HttpServletRequest request){
     //After sucessfull login
     User currentUser=initializeCurrentUser();
     HttpSession session=request.getSession();
     session.setAttribute(SessionToken.NAME, currentUser);
}

如果没有使用默认用户设置登录初始化currentUser并设置为session。如果您想知道集群环,可以将此currentUser保存到db并将recordId设置为session并在需要时进行查询。