2016-06-10 3 views
1

Я разрабатываю бэкэнд приложения с помощью Google App Engine в Android Studio. Я хочу использовать Firebase, поэтому часть его инициализации SDK считывается с учетной записью учетных данных службы JSON. Я добавил файл в моей папке «Src» и попытаться прочитать его, как в док в Firebase в:Доступ запрещен к файлу в моем проекте Google App Engine

FirebaseOptions options = new FirebaseOptions.Builder() 
    .setServiceAccount(new FileInputStream("/src/serviceAccountCredentials.json")) 
    .setDatabaseUrl("https://databaseName.firebaseio.com/") 
    .build(); 

Но всегда бросить исключение, что доступ к файлу запрещен:

java.security.AccessControlException: 
    access denied ("java.io.FilePermission" "/src/serviceAccountCredentials.json" "read") 

Как может Я изменяю разрешение на чтение этого файла? Спасибо :)

+0

вы кладете его в путь к классам, поэтому вы должны прочитать его как ресурс (даже вне App Engine) –

+0

@IgorArtamonov Можете ли вы привести пример, как получить FileInputStream из этого файла в качестве ресурса? Или как добавить его не как classpath? спасибо –

+0

не входной поток _file_, а только входной поток. я также дам ответ –

ответ

1

Ваш адрес расположен в исходном каталоге, поэтому после компиляции он должен быть у корня класса. Но убедитесь, что он есть, это зависит от инструментов сборки на самом деле, некоторые из них могут игнорировать не исходный файл в файле src, потому что такие файлы должны быть в файле resources. Если это ваше дело, переместите файл в ресурсы dir.

Затем, чтобы прочитать этот файл, вы должны использовать его в качестве ресурса:

InputStream cred = this.getClass() 
      .getResourceAsStream("/serviceAccountCredentials.json"); 

FirebaseOptions options = new FirebaseOptions.Builder() 
     .setServiceAccount(cred) 
     .setDatabaseUrl("https://databaseName.firebaseio.com/") 
     .build(); 
+0

Это не работает ... getResourcesAsStream возвращает null ... Я также попытался переместить json в каталог ресурсов вместо src, как вы сказали, все еще не работает:/Любой другой возможный способ? –

+0

hm, вы можете попробовать слэш? т.е. '' /serviceAccountCredentials.json "?? и убедитесь, что он находится в выходных классах dir –

+0

Хорошо, что проблема была в основном местом json ... Я поместил ее в корень проекта вместо основного каталога. Теперь это работает, спасибо! :) –

0

Вам нужно добавить файл в файл AppEngine-web.xml под тегом.

<?xml version="1.0" encoding="utf-8"?> 
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> 
    <application>myApplicationId</application> 
    <version>1</version> 
    <threadsafe>true</threadsafe> 
    <system-properties> 
     <property name="java.util.logging.config.file" value="WEB-INF/logging.properties" /> 
    </system-properties> 
    <resource-files> 
     <include path="secret.json" /> 
    </resource-files> 
</appengine-web-app> 

Таким образом, ваш сервер движка приложений узнает, что вы используете этот статический ресурс, который доступен только для чтения.

Смежные вопросы