如何使 spring 会话在多个请求中保持不变?

How to make spring session persistent throughout multiple requests?

我正在使用 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

因此,创建了一个新实例。

提前致谢。

@Frank,当你通过 Postman 发出请求时,它总是被视为一个新请求。

当您使用 spring 会话和 spring 安全性时,spring 在成功登录后创建新会话。

不是从 Postman 测试应用程序,而是部署应用程序,运行它,测试它并分析它。

一定能帮助您定位问题。

如果 item 是您想要存储在会话中的值,那么您可以使用 Spring 的 @SessionAttributes

假设您的控制器看起来很相似:

@Controller
@SessionAttributes("item")
@RequestMapping("/item")
public class ItemController {
...
}

这个 post 可能会有所帮助 Maintain model data between sessions