Spring boot 如何使spring会话在多个请求中持久化?

Spring boot 如何使spring会话在多个请求中持久化?,spring-boot,spring-mvc,spring-session,Spring Boot,Spring Mvc,Spring Session,我正在使用SpringBoot和Angular开发一个web应用程序(在后台,我还使用SpringSession、Security和DataJPA)。我在会话中遇到了一个问题。似乎spring正在为每个请求创建一个新的会话实例(我检查了会话id)。我的问题是,有没有办法防止这种情况发生?我希望将值存储在会话中,并在整个请求中保持它们的持久性 这不会发生在只有spring boot starter web依赖项的新项目中 这是我的控制器,显示问题: @邮递申请(/set\u item”) 公共vo

我正在使用SpringBoot和Angular开发一个web应用程序(在后台,我还使用SpringSession、Security和DataJPA)。我在会话中遇到了一个问题。似乎spring正在为每个请求创建一个新的会话实例(我检查了会话id)。我的问题是,有没有办法防止这种情况发生?我希望将值存储在会话中,并在整个请求中保持它们的持久性

这不会发生在只有spring boot starter web依赖项的新项目中

这是我的控制器,显示问题:

@邮递申请(/set\u item”)
公共void setItem(HttpSession会话,@RequestParam字符串项){
System.out.println(“Session Id”+Session.getId());
系统输出打印项次(“项目”+项目);
session.setAttribute(“项目”,项目);
System.out.println(“会话项”+会话.getAttribute(“项”);
}
@GetMapping(“/get\u项”)
公共对象getItem(HttpSession会话){
System.out.println(“Session Id”+Session.getId());
System.out.println(“会话属性”+
session.getAttribute(“项”);
return session.getAttribute(“项”);
}
当我在“”上使用邮递员发出请求时 我在控制台里看到的是

Session Id 424dda79-f7b1-4818-8bcc-d371b4a1b7d5
Item Banana
Session Item Banana
因此,我们可以看到属性设置正确

以及在“”上执行GET请求时的控制台日志

因此,将创建一个新实例


提前谢谢你。

@Frank,当你通过邮递员提出请求时,它总是被视为新的请求

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

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


这肯定会帮你找出问题所在。

@Frank,当你通过邮递员提出请求时,它总是被视为一个新的请求

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

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


它肯定会帮助您识别问题。

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

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

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

如果item是您希望存储在会话中的值,那么您可以使用Spring的@SessionAttributes,这篇文章可能会有所帮助

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

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

这篇文章可能会有帮助

您能在浏览器中确认此行为吗?您能在浏览器中确认此行为吗?谢谢!现在一切都变得很有趣。由于我以前使用了Postman的基本身份验证,spring每次都创建了一个新的会话实例。现在我使用Angular发送请求,应用程序按预期工作!非常感谢。现在一切都变得很有趣。由于我以前使用了Postman的基本身份验证,spring每次都创建了一个新的会话实例。现在我使用Angular发送请求,应用程序按预期工作!