AccessControlException:将 Firebase 与 GoogleAppEngine 一起使用时访问被拒绝(“java.lang.RuntimePermission”“modifyT

Posted

技术标签:

【中文标题】AccessControlException:将 Firebase 与 GoogleAppEngine 一起使用时访问被拒绝(“java.lang.RuntimePermission”“modifyThreadGroup”)【英文标题】:AccessControlException: access denied ("java.lang.RuntimePermission" "modifyThreadGroup") while using Firebase with GoogleAppEngine 【发布时间】:2016-04-30 05:31:17 【问题描述】:

我正在使用 Google App Engine 连接到 Firebase,但它引发了异常。我正在遵循以下提到的步骤:

https://cloud.google.com/solutions/mobile/firebase-app-engine-android-studio

虽然它引用的库已经更新,所以我正在运行更新版本的依赖项:

    /** libraries for using firebase on the GoogleAppEngine */
    compile 'com.google.appengine:appengine-api-1.0-sdk:1.9.31'
    compile 'com.firebase:firebase-client-jvm:2.5.0'
    compile 'org.apache.httpcomponents:httpclient:4.3.5'

另外,我没有创建App Engine Java Servlet Module,而是创建了App Engine Backend with Google Cloud Messaging,因为它更容易添加 GCM 功能,并且我手动创建了 servlet(请注意,没有 Firebase 语句,Servlet 可以正常工作)

appengine-web.xml

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    <application>GOOGLE_CONSOLE_PROJECT_ID</application>
    <version>1</version>
    <threadsafe>true</threadsafe>
    <manual-scaling>
        <instances>1</instances>
    </manual-scaling>

    <system-properties>
        <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
    <property name="gcm.api.key" value="YOUR_KEY_HERE"/>
    </system-properties>
</appengine-web-app>

当我创建 Firebase 引用时它崩溃了:

final Firebase usersLocation = new Firebase(Constants.FIREBASE_URL_USERS);

例外:

java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "modifyThreadGroup")
        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:382)
        at java.security.AccessController.checkPermission(AccessController.java:572)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
        at com.google.apphosting.runtime.security.CustomSecurityManager.checkPermission(CustomSecurityManager.java:55)
        at com.google.apphosting.runtime.security.CustomSecurityManager.checkAccess(CustomSecurityManager.java:136)
        at java.lang.ThreadGroup.checkAccess(ThreadGroup.java:315)
        at java.lang.Thread.init(Thread.java:391)
        at java.lang.Thread.init(Thread.java:349)
        at java.lang.Thread.<init>(Thread.java:675)

【问题讨论】:

【参考方案1】:

当我将appengine-api-1.0-sdk 的版本从1.9.31 更改为1.9.26 时,它开始工作了

更新

我用1.9.31 尝试过,我发现它也可以正常工作。我不确定为什么它在第一次尝试时不起作用。

我保持这个线程开放,以便它可以帮助其他面临类似问题的人。

【讨论】:

这里是 Google/Firebase 工程师。感谢更新。我们正在调查造成这种情况的原因。您可以联系 firebase-support@google.com 吗? @FrankvanPuffelen 谢谢。你想让我通过电子邮件发送什么? 主要是为了让我们在需要更多信息时可以直接与您联系。如果你想把它放在这里也很好。 当然。我已经发送了一封电子邮件。【参考方案2】:

可能是您没有部署版本 31? 我可以成功运行 appengine-api-1.0-sdk 1.9.31:

compile 'com.google.appengine:appengine-api-1.0-sdk:1.9.31'
compile 'com.firebase:firebase-client-jvm:2.5.0'
compile 'org.apache.httpcomponents:httpclient:4.5.1'

您描述的症状明确描述了当firebase无法检测到ThreadManager时会发生什么(这可能是由api更改或未部署引起的)。但是我无法最终重现该问题,并且我已验证 api 没有从 26-->31 更改。

【讨论】:

可能是 GCM 示例中的某些东西可能会阻止 1.9.31 加载? 感谢@Benjamin,它与1.9.31 也可以正常工作。

以上是关于AccessControlException:将 Firebase 与 GoogleAppEngine 一起使用时访问被拒绝(“java.lang.RuntimePermission”“modifyT的主要内容,如果未能解决你的问题,请参考以下文章

Java RMI - 访问不同机器上的 RMI 注册表对象 - AccessControlException?

尝试删除文件时出现 AccessControlException

执行 JNLP 文件会引发 AccessControlException

AWS EMR kerberizing 集群 hadoop.security.AccessControlException

java.security.AccessControlException:访问被拒绝(java.io.FilePermission

org.apache.hadoop.security.AccessControlException