0

在浏览器关闭或连接被中断后,我浏览了许多关于此主题
关闭会话的帖子
我在 web.xml 中配置了会话超时,但是一个 senario iam 失败

a) 在我的应用程序中,将创建案例。这种情况可以分配给多个用户。但是两个用户现在应该编辑同一个案例。我处理得很好。我在数据库中存储了一个标志,并基于标志 iam 锁定其他用户。

b)对于一种情况,一个用户编辑案例并丢失连接或浏览器意外关闭,那么他的会话直到指定时间才会关闭,但用户仍然没有编辑它。当另一个用户尝试访问它时。如何关闭会话并更新数据库中的标志。

请就此提出建议。

4

1 回答 1

0

第一种解决方案:使用一个HttpSessionListener,它会在会话即将被销毁时调用。注意删除会话被破坏的用户的所有锁。

二、更好的解决方案:使用乐观锁。允许每个用户修改数据,但如果您检测到用户正在修改的数据版本与开始修改时加载的版本不同,则抛出异常。这可以通过向表中添加版本字段,将其存储为更新表单中的隐藏字段,并在更新时检查它来完成:

update foo set ... , version = version + 1 where id = ? and version = versionSentByTheUser

如果更新没有更新任何内容,则说明用户发送的版本与数据库中的版本不一样,因此其他人修改了数据。

这种乐观锁定机制是由 JPA 为您实现的,顺便说一句。

于 2013-11-11T17:44:52.673 回答