我的GWT应用程序运行时没有对文件的读/写访问权限(java.io.FilePermission)

时间:2010-12-02 22:19:15

标签: java google-app-engine

在尝试运行我的GWT应用程序时,我在运行时收到此错误:

­java.security.AccessControlException: access denied (java.io.FilePermission C:\Users\Admin\AppData\Local\Temp\tmp-andami read)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)

(堆栈跟踪更长,但我想这足以集中解决问题来源)

我在谷歌搜索过这个问题,一般而言,我发现更改了 java.policy 文件的权限(位于C:\ Program Files \ Java \ jre6 \ lib \ security),所以我做了类似的事情:

permission java.io.FilePermission "<<ALL FILES>>" , "read";
permission java.io.FilePermission "C:\Users\Admin\AppData\Local\Temp\tmp-andami" , "read";
permission java.security.AllPermission;

问题在于,PATH文件或文件夹“tmp-andami”不存在(可能是隐藏的),所以我不知道这个文件不存在是一个许可问题还是问题因此无法阅读。

所有这些都来自我的代码上写的一行:

private static final String tempDirectoryPath = 
System.getProperty("java.io.tmpdir")+"/tmp-andami";

但我需要写这个文件,在这里或在另一个路径中,我不在乎。我试图在“C:/”下编写文件但是我得到了相同的结果。

关于这个问题的任何想法?我做错了吗?

非常感谢!


但是我使用的是从“服务器”包端访问我的文件系统,而不是包含可翻译代码的“客户端”。

我认为可以这样做。

那么,我该怎么办?它应该存在一种访问本地文件系统的方式,不是吗?或者至少是另一种做同样的方式。

那么,将此文件放在本地部署的应用程序文件系统下呢?我的意思是,在“战争”目录下或类似的东西。如果浏览器可以访问此文件夹以读取.jars等,是否可以执行相同操作但有其他用途?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

GWT将您的代码编译为在浏览器中运行的JavaScript。 JavaScript无法访问您的文件系统(理由充分)。

java.io.FilePermission未列在JRE Emulation Reference中,因此您无法在客户端代码中使用它,因此甚至无法使用GWT进行编译。

答案 1 :(得分:2)

您无法读取或写入App Engine上的临时文件。您可以阅读随应用程序上传的文件,但无法写入新文件或访问应用程序之外的任何文件。