【问题标题】:Logic (if any) behind Google App Engine excluding standard JDK 1.6 APIsGoogle App Engine 背后的逻辑(如果有),不包括标准 JDK 1.6 API
【发布时间】:2009-04-14 18:26:03
【问题描述】:

GAE 似乎选择了 JDK 1.6 类的子集,如下所示:

Google App Engine JDK white list

这是非常不幸的,因为在处理数据绑定、反射、类加载和注释的大多数常见 java 库中,类链接错误无处不在。虽然有些遗漏可能是针对已弃用或遗留的东西,但也有一些遗漏。我特别关心的是流式拉解析器 (javax.xml.stream.*),它在长时间延迟后才添加到 JDK 1.6(API 与 JDK 1.4 大约同时完成)。忽略这一点会使进行可扩展的高性能 xml 处理变得更加困难。

据我了解的问题是,不仅缺少类,而且由于安全限制,它们甚至无法添加。

所以:这是一个开放式的哲学问题,可能只有 GAE 开发人员可以肯定地回答,但是......为什么有些 API 从标准 JDK 1.6 中删除,似乎是武断的?

更新

快速说明:感谢您的回答。对于它的价值,我真的不明白安全性与不包括 javax.xml.stream 有什么关系。 安全方面与许多其他事情相关(例如,我不需要线程,并且可以看到它们为什么会出现),所以这是可以理解的样板答案;只是不适用于这个。

Stax API 只是一组用于大声喊叫的接口和抽象。但更重要的是,它与包含 SAX、DOM 和 JAXP 接口的结果完全相同——它们已经包含在内!

但看起来这个问题已经引起了谷歌开发者的注意:

discussion on whitelisting Stax API

所以希望这个和类似的问题可以迅速得到解决。

【问题讨论】:

    标签: java google-app-engine jdk1.6 stax


    【解决方案1】:

    GAE 在托管环境中运行,其中包含不受信任的(并且可能是恶意的)客户端,这些客户端通常可以免费访问。

    在这种环境中,安全性是一个非常重要的问题,具有文件系统访问权限的 API 会受到非常严格的审查。我认为这就是为什么他们选择在允许的范围内相当保守地开始。

    不过,如果随着安全问题得到解决(并根据需求),更多课程进入白名单,我一点也不感到惊讶。

    但我什至不希望获得可用的线程工具,例如。

    【讨论】:

    • 完全正确。出于安全原因,白名单在那里。可能排除了一些应该包含的类;希望一旦确定它们是安全的并且不能用于突破沙箱,就会对其进行审查和添加。
    【解决方案2】:

    这些东西被随意丢弃是非常值得怀疑的。 GAE 运行在对安全极为敏感的环境中,对类库的内部审计很可能会发现 Google 不愿意承担的一些风险。

    【讨论】:

    • 我有点怀疑这也是标准。安全性最有可能用于确定安全管理器如何处理对资源(文件、网络等)的请求,但对类包含...
    • @StaxMan - 请记住,GAE 确实允许很多“有风险”的事情。在这种环境中通常必须禁用的许多反射功能都可用。这也使其成为可以使用私有字段、方法等运行哪种攻击的函数。
    • 是的,同意,我认为这很棒。但这有点让人更奇怪的是,没有包括风险较小的东西。我希望这真的是一种“文书错误”,没有任何错误。
    【解决方案3】:

    至于您的高性能流式 XML 解析器,您可以尝试找到合适的库(jar 文件)。除非它依赖线程或文件访问(或列入黑名单的 API),否则它应该与 JDK 中的一样工作。

    有很多(相当复杂的)libraries that work on GAE

    【讨论】:

    • 是的,除非 API lib 实现(如 javax.xml.stream)被有效列入黑名单(在 'javax' 下且未列入白名单),我的理解是无法加载——您可以包含 API jar,但由于违反安全性而无法加载。我想这值得测试一下。
    • 是的。您需要使用该特定库的本机 API(而不是 javax.xml.stream)。
    • 我可以使用原生 API,但 impl 本身必须有可用的 API javax.xml.stream 类——它实现了它们。所以这是更大的问题。与 JAXP 不同,JAXP 是对 DOM、SAX 的非常薄的包装器,Stax 是一个“真正的”API。
    • AWT 和 Swing 类的错误报告引发了类似的问题,可以在 GUI 编程之外使用。该错误已得到承认。所以我想你可以和谷歌的人商量一下。
    • 是的,现在记录了 stax api 的一个问题(由需要它的 Tapestry 用户提出),所以我希望这个问题得到解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 2019-03-09
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多