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