gpt4 book ai didi

javascript - 如何确保 hibernate 版本号在 javascript 客户端中保持不可变?

转载 作者:行者123 更新时间:2023-11-28 00:21:28 27 4
gpt4 key购买 nike

我有一个带有 Java 和 Hibernate 的 Rest 后端,并且我使用带有版本属性的乐观锁定。对于并发控制,此版本属性必须发送到客户端,然后通过 post 请求再次发送到服务器。但是,在 javascript 客户端中,我失去了对此属性完整性的控制,例如:

  • 客户端“A”请求资源 1。
  • 客户端“B”请求相同的资源。
  • 服务器使用资源 1 版本 1 向两个客户端进行响应(在各自的响应中)
  • 客户端“A”修改资源并发布帖子以保存更改。
  • 服务器处理 post 请求,Hibernate 检查版本号。 1 = 1,因此资源被修改。
  • 客户端B玩了javascript,将version属性修改为2,并发出post请求。服务器处理 post 请求,现在 2 = 2,因此资源被修改,客户端 A 所做的更改丢失。

请记住,这是一个 Rest 后端,因此我无法在服务器中保存传递给每个用户的对象的版本号,或者类似的东西。

那么,如果这是一个像我认为的那样的有效问题,我如何确保版本在客户端中保持不可变?

最佳答案

就我个人而言,我会重新考虑这样做,因为我认为客户端几乎没有动机这样做,并且根据定义,您无法控制客户端发送到 REST 服务的内容。

但是,如果您确实有业务案例,那么一种半解决方案是将版本属性设置为 GUID。这样,只有在拥有最新的 GUID 时才可以提交,而客户端 B 则不会拥有,并且这会使版本控制情况变得更加复杂,因为在请求成功之前不能只加 1。

但是,即使在那里,您也并不完全安全,因为理论上客户端 B 可以执行单独的请求以从资源获取更新的 GUID,然后使用更新的 GUID 重新提交失败的请求。

但是由于客户端 B 可以对更新版本进行编辑以恢复客户端 A 所做的操作并添加自己的操作,因此这本质上与执行此操作相同,并且由于他们有权这样做,因此我们又回到询问我们自己为什么再次担心这个案子。

关于javascript - 如何确保 hibernate 版本号在 javascript 客户端中保持不可变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29973919/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com