【问题标题】:Data handling in web app with GWT, Struts and Hibernate使用 GWT、Struts 和 Hibernate 在 Web 应用程序中处理数据
【发布时间】:2009-02-05 20:20:31
【问题描述】:

我正在使用 Struts 和 Hibernate 编写一个 Web 应用程序。最近,我发现了GWT 和Visualization API。这一切看起来都非常有趣,并提供了我的应用程序需要的 AJAX 功能。我是一个很困惑的新手....

在哪里放置数据访问级别检查?

在网络应用中,用户对数据具有不同的访问权限。例如不同数据的不同读/写权限组合。当访问或修改任何数据时,应用程序会检查某种用户配置文件。用户将根据结果获得数据访问权限——拒绝查看访问权限或可以查看数据但无法更改数据等。我不确定在哪里进行此特定检查。我想我可以将它编码在 DAO 的 中,每次处理数据操作时,根据配置文件手动检查查询的数据。或者,放在业务逻辑/显示层,如果用户没有数据访问权限,就拿离用户的按钮。还是两者都?或者是否有一个 hibernate 中的配置文件 我可以为所有映射的表指定数据访问权限?

传递信息的最佳实践

模型/视图/控制器之间非常需要通信,对 GWT 进行 RPC 调用并将数据传递给可视化代码以呈现图表和其他内容。我猜它肯定需要某种 translator 将 Java 对象转换为 JSON 对象,以便进行 gwt-rpc 调用并使用 Visualization API 绘制图表。我对么?此外,就在 Struts 和 Hiberante 中传递信息而言——编写 Data Transfer Objects 是个好主意吗?然后一直传递beans?或者(我今天刚刚遇到这个......甚至不确定我是否理解正确)可能将对象绑定到 JNDI,并从程序的其他部分访问它们?

任何输入/澄清将不胜感激。非常感谢!

【问题讨论】:

    标签: hibernate gwt struts jndi google-visualization


    【解决方案1】:

    访问级别检查:

    我会将访问级别检查分离到它自己的类中,并让您的“控制器”在调用 DAO 之前先调用访问管理器。即,在执行 DAO 调用以获取/插入数据之前,每个操作都会执行检查。

    但是,如果您使用 gwt,一个更好的方法是进行 RPC 调用而不是使用 struts 操作。 rpc 调用成为我上面提到的“控制器”,并且可以使用我上面提到的管理器进行访问检查 - 即消除操作。

    对于访问管理器,我建议枚举所有细粒度的访问权限,并将这些权限组合成一个集合,可以与每个用户/配置文件/任何东西相关联。

    传递信息 gwt 与 hibernate 一起工作很痛苦 - 你可以尝试使用 Gilead ,但我没有取得太大的成功,它对我来说太麻烦了。您对 json 转换的想法是进入 gwt imho 的正确方法。 gwt 1.5 支持所谓的 javascript 对象覆盖,它允许您返回 json,并直接将其“叠加”到 gwt java 对象中,而您只需很少的代码。 check out this post 了解更多信息。

    另一种方法是推出您自己的 DTO 生成设施(这是 Gilead 的本意,但我认为它不会自动生成?不确定)。将其作为构建的一部分实施。如果它不是一个大项目,它的一些额外工作是不值得的。

    【讨论】:

      【解决方案2】:

      关于您的第一个问题,我不能说太多,因为我真的不喜欢将 Struts 用于任何与 GWT 相关的事情。

      关于你的第二个问题,不,你不应该使用任何 JSON。听起来您的后端是 Java,这意味着 GWT RPC 机制只能与 POJO 一起使用。因此,您只需创建绘图所需的对象并在客户端和服务器之间来回传递它们。 GWT 将立即为您完成所有 RPC 工作。

      可能需要编写数据传输对象,但前提是您的休眠模型文件包含 GWT 编译器无法理解的内容。我通常使用 EJB3 和 Stripes(而不是 Hibernate 和 Struts),在我的情况下,我不需要编写任何数据传输对象,我只需使用 EJB3 POJO 并在我的客户端和服务器之间传递它们。

      【讨论】:

      • 如果你使用hibernate,你的域对象不能被gwt序列化,即使它只包含gwt可序列化的对象。那是因为休眠代理了结果,尤其是集合/列表。除非参与 rpc 的对象不是来自 hibernate,否则您将成为 DTO。
      【解决方案3】:

      在服务器端检查数据访问级别是最安全的方法。但是 GWT 仍然会生成一个打包的 JS。您可以在客户端执行此操作。但在这种情况下,每次都应该从服务器端检查/获取用户配置文件。

      传递信息:我在向量中使用分隔字符串。而且运行良好……

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-07
        • 1970-01-01
        • 2021-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-03
        • 1970-01-01
        相关资源
        最近更新 更多