我创建了一个成功使用外部 jar 文件的 GWT 项目(请参阅Lars Vogel 的 GWT - 使用外部 jars/Java 项目和在 GWT 中添加外部 jar)。
当我使用这样的库文件时,当我编译项目并将其上传到 AppEngine 时会发生什么?jar 文件是按原样上传的,还是先编译成别的东西?如果是前者,是否存在在不受我控制的情况下被下载的任何安全风险?
我创建了一个成功使用外部 jar 文件的 GWT 项目(请参阅Lars Vogel 的 GWT - 使用外部 jars/Java 项目和在 GWT 中添加外部 jar)。
当我使用这样的库文件时,当我编译项目并将其上传到 AppEngine 时会发生什么?jar 文件是按原样上传的,还是先编译成别的东西?如果是前者,是否存在在不受我控制的情况下被下载的任何安全风险?
实际上,他的回答并不完全正确。“google-app-engine”部分在这里很重要。从技术上讲,GWT 编译并混淆了它需要的所有 Java 代码。它会剔除所有不需要的东西。因此,从 GWT 生成的 JavaScript 来看,确实应该是不可能重构甚至识别该库的。但事实证明,如果您使用 Eclipse 插件来部署您的应用程序,appcfg 会将各种随机内容上传到 AppEngine 服务器,有时包括项目的整个 Java 源代码(包括客户端代码)。
要在您进行部署时查看它上传的确切内容,请在temp
上传运行时检查系统的 - 目录。您将在那里找到一个 AppEngine 暂存目录,其中包含要发送的所有内容。
有关解决此问题的建议,您可以参考我之前提出的问题的答案:从 AppEngine 部署中删除不需要的上传
我没有检查的是所有不需要的上传文件是否最终都位于实际上可以从互联网直接访问的目录中。
让我们放弃“google-app-engine”部分,这里没关系。您在客户端使用 GWT 中的库。App Engine 是服务器端,与 GWT 没有直接连接(但由于容量限制,使用一些客户端执行(如 GWT)非常有用)。
您在 GWT 中使用的所有内容都将编译为 JavaScript,传输到客户端并在那里执行。显然,您无法控制结果以及客户如何处理它。
但这将是不可读的。另外,客户本身并没有得到 JAR,他也没有得到 JAR 中的所有内容。
所以真正重要的是库的许可证是否允许这样做,以及库代码中是否存在仅打算在服务器端使用的秘密。