是否可以访问Google App Engine开发服务器中WEB-INF文件夹以外的文件?也许我可以以某种方式强迫GAE开发服务器不阻止外部连接/文件访问?
我正在尝试创建gae-sqlite的Java版本。但由于access denied
例外,我无法访问外部sql server(mysql或h2db)。
调用堆栈:
Caused by: java.security.AccessControlException: access denied (java.io.FilePermission C:\work\test_projects\gae_test\out\artifacts\gae_test_war_exploded\database.lock.db write)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374)
at java.security.AccessController.checkPermission(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:252)
at java.lang.SecurityManager.checkWrite(SecurityManager.java:962)
at java.io.File.createNewFile(File.java:882)
at org.h2.store.fs.FilePathDisk.createFile(FilePathDisk.java:121)
at org.h2.store.fs.FileUtils.createFile(FileUtils.java:59)
at org.h2.store.FileLock.lockFile(FileLock.java:327)
at org.h2.store.FileLock.lock(FileLock.java:128)
at org.h2.engine.Database.open(Database.java:542)
at org.h2.engine.Database.openDatabase(Database.java:222)
答案 0 :(得分:0)
为什么我不能从这个文件中读取?
可以从作为您的一部分上传的文件中读取 应用程序提供它位于以下位置:
- 战/ WEB-INF
- 位于与
<resource-files>
appengine-web.xml
模式匹配的位置(默认情况下包含所有内容)如果文件位置不是问题,问题可能是 您用于从文件中读取的方法未列入白名单。您的 应用程序可以使用任何对读取有用的IO类 文件系统,例如File,FileInputStream,FileReader或 RandomAccessFile的。有关列入白名单的完整列表,请参阅 JRE班级白名单。如果您需要获取自己的文件访问权限 资源(如属性文件),你可以把这些文件放在里面 罐子并使用Class或ClassLoader加载它们。
所以回答你的问题,WEB-INF
目录以外唯一可用于读取文件的地方是你在<resource-files>
中指定的任何地方在appengine-web.xml
中输入。
现在有一件事我注意到你正在尝试读取一个DB文件,如果你只考虑只读那就应该没问题。您无法写入任何“本地”文件,因为(来自同一链接):
为什么我不能写这个文件?
App Engine不支持写入本地文件 应用程序的分布式特性。相反,数据必须是 持久化应存储在分布式数据存储区中。更多 信息请参阅运行时沙箱上的文档。
答案 1 :(得分:0)
从GAE SDK 1.6.1开始,这是不可能的。如果你们以后找到了办法,请告诉我。