【发布时间】:2021-05-12 22:39:55
【问题描述】:
我很难理解 spring rest 如何识别新会话。假设我们有这样定义的简单会话 bean:
@SessionScope
public class Counter {
private int counter;
public int inc() {
return counter++;
}
}
我们还有一个简单的 rest 控制器,它提供 get 方法,该方法调用 Counter 的 inc() 方法并返回其当前值。
我期望每个请求(在邮递员中发出)都会导致获得值 1,因为无法识别会话。例如,没有像在传统的基于 servlet 的应用程序中那样的 JSESSION_ID cookie。我实际得到的是计数器的增加值,无论我是在邮递员、网络浏览器还是 curl 中提出请求都没有关系。即使在私有模式下使用浏览器仍然指的是同一个 bean 实例。
问题是 spring 如何识别新会话以及如何在我的“测试”环境中模拟不同的会话。
【问题讨论】:
-
@SessionScope表示“每个会话”一个实例,因此该计数器不会增加,因为当 Spring 创建一个新会话时,也会创建一个Counter的新实例。 -
问题是它确实如此。