java - 如何保护基于 XML 的数据源?

标签 java google-app-engine gwt smartgwt

我有一个基于 GWT/SmartGWT 的应用程序,它部署在 Google App Engine 上。我正在使用基于 XML 的数据源。所有用户的应用程序正常运行都需要此文件。但是,我不希望非管理员用户能够通过在地址栏中指定其完整路径来直接查看或下载该文件。我无法使用如下所述的 GAE 安全约束(仅允许管理员访问),因为这将使应用程序对普通用户毫无用处。

<security-constraint>
    <web-resource-collection>
        <url-pattern>ds/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>admin</role-name>
    </auth-constraint>
</security-constraint>

那么,有没有一种方法可以阻止用户直接访问该文件,但仍然允许他们通过应用程序使用它?

提前致谢。

更新(2011 年 5 月 3 日):

我的数据位于多个 XML 文件中,并且所有数据都是只读的(只能获取,不能对这些文件进行添加/更新/删除)。我在客户端上有一些使用此数据的不同功能。大多数时候,每个功能都有一个单独的数据源。在某些情况下,我与 SmartGWT 小部件(如 ListGrid)进行数据绑定(bind),而在其他情况下,我只需将数据转换为对象并在客户端上使用这些对象。

最佳答案

所以文件必须由客户端代码(javascript)下载,但您不希望用户看到它?

这是无法完成的 - 如果数据在客户端上可用,则可以访问它。

解决办法是:

  1. 错误的解决方案:通过 GWT-RPC 公开此数据,而不是通过文件下载。 GWT-RPC 很难进行逆向工程,因此“普通”最终用户将无法简单地下载数据。但是,具有一定知识的用户将能够做到这一点,因此这不是保护敏感数据的解决方案。

  2. 正确的解决方案:仅向客户端公开给定用户所需且相关的数据。使用 GWT-RPC 访问此数据,或者如果您还有其他非 GWT 客户端,则使用 REST。不要暴露任何敏感数据。这基本上迫使您在服务器上而不是在客户端上实现业务逻辑。这是正确的做法。

更新:

你还是应该secure the servlet :

<security-constraint>
    <web-resource-collection>
        <url-pattern>/profile/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>*</role-name>
    </auth-constraint>
</security-constraint>

关于java - 如何保护基于 XML 的数据源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5860382/

相关文章:

java - 如何配置从maven在GWT项目中运行

java - 按钮列表列表为空

javascript - GWT HTTP 响应 getText() 作为二进制

Java:将毫秒转换为 HH:MM:SS

java - 当 SQLiteDatabase.rawQuery() 工作正常时,SQLiteDatabase.query() 出现问题

python - 如何从代码而不是 Google App Engine 上的文件呈现 Django 模板

python - Google Sheet API 中的 Spreadsheets.values.batchUpdate() 中的每个范围更新都是请求调用

java - Maven/GAE - 缺少一些 Datanucleus 类

java - Eclipse 无法识别构建路径上另一个项目的引用库的导入

java - 带有Gradle和TestNG的FarmIntegrationTest无法运行?