【问题标题】:Spring boot - Accessing firebase admin sdk credentials json file from inside a jarSpring boot - 从 jar 中访问 firebase admin sdk 凭据 json 文件
【发布时间】:2020-03-13 04:16:42
【问题描述】:

我有一个使用 Firebase Admin SDK 的 Java Spring Boot 后端应用程序。在 FirebaseConfig 的 init 方法中,我必须为 FirebaseOptions 提供凭据文件,

@PostConstruct
public void init() throws IOException {
    ClassLoader classLoader=Thread.currentThread().getContextClassLoader();
    FileInputStream refreshToken = new FileInputStream("src/main/resources/progresee-fa969-firebase-adminsdk-3vip2-d80bf340b7.json");
    FirebaseOptions options = new FirebaseOptions.Builder()
        .setCredentials(GoogleCredentials.fromStream(refreshToken))
        .setDatabaseUrl(dbUrl)
        .build();
    FirebaseApp.initializeApp(options);
}

当我在本地运行时一切正常,但是当我构建 jar 文件并上传到服务器托管服务 (AWS) 时,我收到 FileNotFound 错误 -

Caused by: java.io.FileNotFoundException: /progresee-fa969-firebase-adminsdk-3vip2-d80bf340b7.json (No such file or directory)
at java.io.FileInputStream.open0(Native Method) ~[na:1.8.0_222]
at java.io.FileInputStream.open(FileInputStream.java:195) ~[na:1.8.0_222]
at java.io.FileInputStream.<init>(FileInputStream.java:138) ~[na:1.8.0_222]
at java.io.FileInputStream.<init>(FileInputStream.java:93) ~[na:1.8.0_222]
at com.progresee.app.firebase.FirebaseConfig.init(FirebaseConfig.java:55) ~[classes!/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_222]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_222]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_222]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_222]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:363) ~[spring-beans-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:307) ~[spring-beans-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136) ~[spring-beans-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
... 74 common frames omitted

我尝试将文件上传到 s3 存储桶或 firebase 并通过 URL 访问它,但这种方式甚至无法在本地工作。

提前致谢, 陈。

【问题讨论】:

标签: java spring firebase-admin


【解决方案1】:

要在 fat jar 中添加 JSON 配置,请按照以下步骤操作。

  1. 将 JSON 文件放入src/main/resources

  2. 在Service中注入资源加载器

    @Autowired
    ResourceLoader resourceLoader;
    
  3. 获取资源的输入流而不是获取文件

    Resource resource = resourceLoader.getResource("classpath:firebaseFile.json");    
    InputStream inputStream = resource.getInputStream();
    
  4. 在 firebase 选项中传递输入流

【讨论】:

  • 与:.setCredentials(GoogleCredentials.fromStream(inputStream)) :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
  • 1970-01-01
  • 2017-08-07
  • 2018-08-07
  • 1970-01-01
  • 2021-03-02
相关资源
最近更新 更多