【发布时间】:2019-09-07 11:09:15
【问题描述】:
我正在使用 Spring Boot 和 Angular 开发一个 Web 应用程序(在后台我也使用 Spring Session、Security 和 Data Jpa)。我遇到了会话问题。似乎 spring 正在为每个请求创建一个新的会话实例(我检查了会话 ID)。我的问题是,有什么办法可以防止这种情况发生吗?我想在会话中存储值并在整个请求中保持它们的持久性。
这不会发生在只有 spring-boot-starter-web 依赖项的新项目中。
这是我的控制器显示问题:
@PostMapping("/set_item")
public void setItem(HttpSession session, @RequestParam String item) {
System.out.println("Session Id " + session.getId());
System.out.println("Item " + item);
session.setAttribute("item", item);
System.out.println("Session Item " + session.getAttribute("item"));
}
@GetMapping("/get_item")
public Object getItem(HttpSession session) {
System.out.println("Session Id " + session.getId());
System.out.println("Session Attribute " +
session.getAttribute("item"));
return session.getAttribute("item");
}
当我在“http://localhost:8181/set_item?item=Banana”上使用 POSTMAN 发出请求时 我在控制台中得到的是
Session Id 424dda79-f7b1-4818-8bcc-d371b4a1b7d5
Item Banana
Session Item Banana
所以我们可以看到属性设置正确。
当我对“http://localhost:8181/get_item”发出 GET 请求时,我的控制台日志
Session Id e04f0de2-d7d2-4827-9652-3f6232b27c3f
Session Attribute null
因此,创建了一个新实例。
提前谢谢你。
【问题讨论】:
-
你能在浏览器中确认这个行为吗?
标签: spring-boot spring-mvc spring-session