Можно ли получить доступ к файлам вне папки WEB-INF в режиме разработки GAE (java.security.AccessControlException: доступ запрещен)? - PullRequest
0 голосов
/ 21 января 2012

Можно ли получить доступ к файлам вне папки WEB-INF на сервере разработки Google App Engine?Может быть, я могу как-то заставить сервер GAE dev не блокировать внешние подключения / доступ к файлу?

Я пытаюсь создать версию Java gae-sqlite .Но я не могу получить доступ к внешнему серверу sql (mysql или h2db) из-за исключений access denied.

Стек вызовов:

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)

Ответы [ 2 ]

0 голосов
/ 20 февраля 2012

Начиная с GAE SDK 1.6.1 это невозможно.Если вы, ребята, позже найдете способ сделать это, пожалуйста, дайте мне знать.

0 голосов
/ 21 января 2012

Согласно GAE для вопросов Java :

Почему я не могу прочитать из этого файла?

Можно читать из файла, который загружен как часть вашего Приложение при условии, что оно находится в следующих местах:

  • война / WEB-INF
  • в месте, соответствующем шаблону <resource-files> в appengine-web.xml (который по умолчанию включает в себя все)

Если расположение файла не является проблемой, проблема может заключаться в том, что Метод, который вы используете для чтения из файла, не входит в белый список. Ваш Приложение может использовать любые классы ввода-вывода, которые полезны для чтения из файловая система, такая как File, FileInputStream, FileReader или RandomAccessFile. Полный список классов в белом списке смотрите белый список класса JRE. Если вам нужно получить доступ к файлу на свой ресурсы (такие как файлы свойств), вы можете поместить эти файлы внутри банок и используйте Class или ClassLoader для их загрузки.

Таким образом, чтобы ответить на ваш вопрос, единственное доступное место, кроме каталога WEB-INF для чтения файлов из того, что вы указали в записи <resource-files> в appengine-web.xml.

Теперь я заметил одну вещь: вы пытаетесь прочитать файл БД, который должен быть в порядке, если вы рассматриваете его только для чтения . Вы не можете записывать в любые "локальные" файлы, потому что (по той же ссылке):

Почему я не могу записать в этот файл?

Запись в локальные файлы не поддерживается в App Engine из-за распределенный характер вашего приложения. Вместо этого данные, которые должны быть постоянные должны храниться в распределенном хранилище данных. Для большего информацию смотрите в документации по песочнице времени выполнения.

...