0

Google App Engine の開発サーバーで WEB-INF フォルダーを超えてファイルにアクセスすることはできますか? どうにかして GAE 開発サーバーに外部接続/ファイル アクセスをブロックしないように強制することはできますか?

Java バージョンのgae-sqliteを作成しようとしています。しかし、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)
4

2 に答える 2

0

GAE SDK 1.6.1 以降では不可能です。後でそれを行う方法を見つけたら、私に知らせてください。

于 2012-02-20T02:44:49.933 に答える
0

GAE for Java Questionsによると:

このファイルから読み取れないのはなぜですか?

次の場所にある場合、アプリケーションの一部としてアップロードされたファイルから読み取ることができます。

  • 戦争/WEB-INF
  • <resource-files>のパターンに一致する場所appengine-web.xml(デフォルトではすべてが含まれます)

ファイルの場所が問題でない場合は、ファイルからの読み取りに使用している方法がホワイトリストに登録されていない可能性があります。アプリケーションでは、File、FileInputStream、FileReader、または RandomAccessFile など、ファイル システムからの読み取りに役立つ任意の IO クラスを使用できます。ホワイトリストに登録されたクラスの完全なリストについては、JRE クラスのホワイト リストを参照してください。独自のリソース (プロパティ ファイルなど) へのファイル アクセスを取得する必要がある場合は、これらのファイルを jar 内に配置し、Class または ClassLoader を使用してそれらをロードできます。

したがって、あなたの質問に答えるために、ファイルを読み取るWEB-INFディレクトリ以外に利用できる唯一の場所は、 のエントリで指定したものです。<resource-files>appengine-web.xml

ここで気づいたことの 1 つは、DB ファイルを読み込もうとしているということです。(同じリンクから)次の理由により、「ローカル」ファイルに書き込むことはできません。

このファイルに書き込めないのはなぜですか?

アプリケーションが分散型であるため、ローカル ファイルへの書き込みは App Engine ではサポートされていません。代わりに、永続化する必要があるデータは分散データストアに格納する必要があります。詳細については、ランタイム サンドボックスに関するドキュメントを参照してください。

于 2012-01-21T04:55:46.773 に答える