2012-01-21 52 views
0

是否可以訪問Google App Engine開發服務器中WEB-INF文件夾以外的文件?也許我可以強制GAE開發服務器不要阻止外部連接/文件訪問?是否可以在GAE的dev模式(java.security.AccessControlException:access denied)下訪問超出WEB-INF文件夾的文件?

我正在嘗試創建gae-sqlite的Java版本。但由於access denied例外,我無法訪問外部sql服務器(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

從GAE SDK 1.6.1開始,這是不可能的。如果你們後來找到辦法,請讓我知道。

0

根據GAE for Java Questions

爲什麼我不能從該文件讀取?

有可能從被上傳爲您 應用程序的一部分,只要它是在以下位置讀取文件:

  • 戰爭/ WEB-INF
  • 的位置相匹配的<resource-files>appengine-web.xml模式(默認情況下包括一切)

如果文件位置不是問題,問題可能是你正在使用的 方法從文件中讀取未列入白名單。您的 應用程序可以使用任何IO類,這些類對於從文件系統(如File,FileInputStream,FileReader或RandomAccessFile)中讀取 很有用。有關白名單班級的完整列表,請參閱JRE班級白名單 。如果您需要將文件訪問到您自己的 資源(例如屬性文件),則可以將這些文件放入罐子的 中,並使用Class或ClassLoader加載它們。

所以要答案你的問題,除了WEB-INF目錄唯一可用的地方讀文件從您在appengine-web.xml<resource-files>進入指定的任何是。

現在有一兩件事我注意到的是,你要閱讀這應該是好的,如果你只是考慮到它只讀一個DB文件。您不能寫任何「本地」的文件,因爲(從同一個鏈接):

爲什麼我不能寫入到該文件?

由於應用程序的分佈式特性,在App Engine中不支持寫入本地文件。相反,必須保留的數據應存儲在分佈式數據存儲中。有關更多 信息,請參閱運行時沙箱上的文檔。

+0

是啊,我讀過,當然這個FAQ。有沒有解決方法?我想知道爲什麼gae-sqlite可以工作。 – expert

相關問題