我有一个名为“家长”,其中包含对象的“孩子”的集合,一个简单的POJO。
在Hibernate / JPA,它只是一个一对多的关联,孩子不知道他们的父母:这些子对象可以有不同类型的家长,因此很容易不知道父(认为儿童代表标签和家长可以的具有标签不同的对象类型)。
现在,我把我的父对象到我的网站的客户视图,允许用户对其进行修改。
对于它,我使用Hibernate / GWT /基列。
我的用户mades一些改变,然后点击保存按钮(阿贾克斯),它发送我的父对象到服务器。 我的父母的领域已被修改,但更重要的是,一些子对象已添加或集合中删除。
要总结,当父对象回来到服务器,它现在有它的汇集: - 新的“儿童”的对象,其中ID为null,并且必须坚持 - 修改“儿童”的对象其中id是不是空的,需要被合并 - 潜在的黑客攻击“孩子”的对象其中id是不是空但不最初是由属于母公司 - 子对象缺失(删除):需要被删除
你如何保存父对象(及其集合)? 你从数据库中加载父集合比较修改集合中的每个对象,看看有没有被黑客入侵的项目? 你清除旧集合(删除孤儿),然后重新添加新的子(但还没有被修改,一些孩子)?
谢谢
PS:对不起,我的英语,我希望你能理解这个概念;)
东西在您的堆栈必须提供你所谈论的逻辑,并给予你的情况下,它可能是你。 你将不得不让电流从数据源读取,所以你可以做的比较持久对象的状态。 请记住,如果几个合法的行为可以更新你的父对象及其集合同时您将有超过定义您的交易谷物和你的代码的线程安全的性质,采取非常谨慎。
这是不以任何方式一个简单的问题,有可能是框架的功能,可以帮助,但我还没有找到一种解决这个对我所遇到的任何真实世界的实现,特别是当我有逻辑,其试图区分合法“黑客”的数据。
您可以考虑改变你的架构使得家长和孩子单独行动坚持。 它可能不是你的情况适当的,但您可能能够通过拆分的持续行动,有交易的更细的颗粒,并提供面向儿童的安全性,让您的黑客更易于管理的问题。
祝好运。 我建议你画你的逻辑的详细流程图你做太多的编码之前。
我已经找到了最好的解决方案是管理DTO,手动创建。 该DTO只发送需要DATAS到客户端。 对于想以只读模式来设置每个领域,我计算基于我发送给客户端与我的DTO密钥签名。
当我的DTO回来到服务器,我检查签名,以确保我的只读域并没有改变(重新计算与回来场签名和比较,回来与DTO签名)
它让我指定只读域,并确保我的对象不砍死。
文章来源: Security question: how to secure Hibernate collections coming back from client to server?