AccessControlException:访问被拒绝(" java.lang.RuntimePermission"" modifyThreadGroup")使用Firebase和GoogleAppEngine

时间:2016-01-23 17:39:28

标签: java google-app-engine android-studio firebase

我正在使用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(请注意,Servlet在没有Firebase语句的情况下工作正常)

应用服务引擎-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)

2 个答案:

答案 0 :(得分:2)

当我将appengine-api-1.0-sdk的版本从1.9.31更改为1.9.26

时,它开始有效

<强>更新

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

我保持这个线程处于打开状态,以便它可以对面临类似问题的其他人有所帮助。

答案 1 :(得分: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改变。