java - 我们如何有效地防止在一个 session 中同时使用 Web 应用程序?

标签 java session spring-mvc

我们构建了一个 Spring MVC Web 应用程序,该应用程序严重依赖用户按特定顺序执行操作,并且在通常情况下(通过不提供“去往你不应该在特定时刻去的地方”),当人们在新选项卡或浏览器窗口中打开应用程序的另一个实例时,我们会遇到一些问题。

由于应用程序将域模型存储在用户的 session 中,因此在另一个窗口中使用该程序可能会弄乱模型的数据,因此我们已经实现了一个页面 ID 机制,该机制可以验证用户是否以正确的顺序使用该程序并且不使用浏览器导航,但是当诸如重置程序(这是一项功能,将用户重定向到主屏幕并清除域模型)之类的事情发生在一个窗口中并且用户然后尝试执行操作时,我们仍然面临问题依赖域模型在另一个窗口中填充有效数据的东西(很快导致 NullPointerException)。

最佳答案

在 session 中存储一些用户详细信息(如 ID、姓名、电子邮件)可能没问题,但存储用户的状态(或任何经常更改和/或显着影响您的其他内容的数据)应用程序)听起来不是一个好主意。

希望以下方法之一适合您:

  • 不要在 session 中保存状态 - 在需要时从数据库加载它(在您的情况下,每当用户尝试访问应按顺序完成的步骤之一时)。如果您使用缓存,这不会对性能产生重大影响。
  • 不要在数据库中保存状态,仅在 session 中保存状态 - 适用于有限的情况(例如,订购机票),您可以推迟提交域对象,直到该过程完成。
  • 使用 Ajax 进行多步骤流程,并且根本不保存状态(除非在浏览器中隐式保存)。这需要将所有步骤放入一个页面中并使用 ajax 化一些代码。

无论如何,如果有人登录并尝试进入步骤 3,他们不应该收到抛出异常,但这是一个不同的故事。

关于java - 我们如何有效地防止在一个 session 中同时使用 Web 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10418815/

相关文章:

java - Datastax Java 驱动程序是否容易受到注入(inject)攻击?

java - 在客户端分析 Mongo

java - 需要有关 Drools -version 7.X 与 java 11 兼容性的更多信息

hibernate - 无法使用 SpringBoot 延迟初始化角色集合

java - 集合 - 将元素添加到集合中

java - Java 空 Optional 的类型是什么?

php登录 session

asp.net-mvc - ASP.NET MVC - 如何在 Controller 和 View 以外的地方访问 session 数据

java - Swagger - 自定义示例请求正文

php - 用户登录后如何显示页面