【问题标题】:How spring rest recognizes a new session?spring rest 如何识别新会话?
【发布时间】: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 的新实例。
  • 问题是它确实如此。

标签: java spring rest session


【解决方案1】:

找到答案 - bean 缺少 @Component 注释。使用该 JSESSION_ID cookie 创建,显然这是 spring 识别会话的方式。

【讨论】:

    猜你喜欢
    • 2012-08-03
    • 1970-01-01
    • 2015-10-27
    • 2011-10-18
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    相关资源
    最近更新 更多