Java 应用程序引擎上的slf4j AccessControlException

Java 应用程序引擎上的slf4j AccessControlException,java,google-app-engine,slf4j,Java,Google App Engine,Slf4j,我所要做的就是使用它。显然它需要slf4j。因此,我将jarslf4j-api-1.7.12.jar添加到我的项目中。现在我得到以下错误跟踪。所以luceneappengine是专为GAE设计的。那么,当Java本身带有记录器时,为什么它需要一个不容易支持的记录器呢?我错过了什么 com.google.api.server.spi.SystemService invokeServiceMethod: exception occurred while calling backed method j

我所要做的就是使用它。显然它需要slf4j。因此,我将jar
slf4j-api-1.7.12.jar
添加到我的项目中。现在我得到以下错误跟踪。所以luceneappengine是专为GAE设计的。那么,当Java本身带有记录器时,为什么它需要一个不容易支持的记录器呢?我错过了什么

com.google.api.server.spi.SystemService invokeServiceMethod: exception occurred while calling backed method
java.lang.ExceptionInInitializerError
    at org.slf4j.LoggerFactory.bind(LoggerFactory.java:149)
    at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:120)
    at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:331)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:283)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:304)
    at com.googlecode.luceneappengine.GaeDirectory.<clinit>(GaeDirectory.java:56)
    …
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:45)
    at com.google.api.server.spi.SystemService.invokeServiceMethod(SystemService.java:359)
    at com.google.api.server.spi.SystemServiceServlet.execute(SystemServiceServlet.java:160)
    at com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceServlet.java:118)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
    at com.googlecode.objectify.ObjectifyFilter.doFilter(ObjectifyFilter.java:48)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:437)
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:444)
    at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:220)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:308)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:300)
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:441)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "createSecurityManager")
    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 java.lang.SecurityManager.<init>(SecurityManager.java:299)
    at org.slf4j.helpers.Util$ClassContextSecurityManager.<init>(Util.java:43)
    at org.slf4j.helpers.Util$ClassContextSecurityManager.<init>(Util.java:43)
    at org.slf4j.helpers.Util.<clinit>(Util.java:49)
    ... 42 more
com.google.api.server.spi.SystemService invokeServiceMethod:调用备份方法时发生异常
java.lang.ExceptionInInitializeError
位于org.slf4j.LoggerFactory.bind(LoggerFactory.java:149)
在org.slf4j.LoggerFactory.performinization上(LoggerFactory.java:120)
位于org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:331)
位于org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:283)
位于org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:304)
在com.googlecode.luceneappengine.GaeDirectory上(GaeDirectory.java:56)
…
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:45)
位于com.google.api.server.spi.SystemService.invokeServiceMethod(SystemService.java:359)
位于com.google.api.server.spi.SystemServiceServlet.execute(SystemServiceServlet.java:160)
位于com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceServlet.java:118)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
位于org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
位于com.googlecode.objectify.ObjectifyFilter.doFilter(ObjectifyFilter.java:48)
位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
位于org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
位于org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
位于org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
位于org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
位于org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
位于org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
位于org.mortbay.jetty.Server.handle(Server.java:326)
位于org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
位于org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
位于org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
位于com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:437)
在com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:444)
位于com.google.tracing.CurrentContext.runInContext(CurrentContext.java:220)
在com.google.tracing.TraceContext$AbstractTraceContextCallback.RunInheritedContextNonRef(TraceContext.java:308)
在com.google.tracing.TraceContext$AbstractTraceContextCallback.RunInheritedContext(TraceContext.java:300)
位于com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:441)
运行(Thread.java:745)
原因:java.security.AccessControlException:拒绝访问(“java.lang.RuntimePermission”“createSecurityManager”)
位于java.security.AccessControlContext.checkPermission(AccessControlContext.java:382)
在java.security.AccessController.checkPermission(AccessController.java:572)中
位于java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
位于java.lang.SecurityManager。(SecurityManager.java:299)
在org.slf4j.helpers.Util$ClassContextSecurityManager上。(Util.java:43)
在org.slf4j.helpers.Util$ClassContextSecurityManager上。(Util.java:43)
位于org.slf4j.helpers.Util(Util.java:49)
... 42多

SLF4J应该可以工作,您确定使用的版本与LAE的依赖项中定义的版本相同吗


尝试此处解释的设置:

我遇到了同样的问题,结果是因为我有两个slf4j实现。我明确地使用了slf4j-jdk14,这似乎是GAE的推荐实现,我的一个库(ApacheJena)引入了slf4j-log4j12

我的调试输出(以及上面列出的错误)中的某个地方是org.slf4j.LoggerFactory.reportMultipleBinding歧义(以及AccessControlException)

我不知道为什么Jena会包含slf4j-log4j12——我的其他库只是依赖于slf4j api,并将实现的选择留给用户。在任何情况下,我都将slf4j-log4j12从Jena中排除,在我的情况下如下所示:

compile ('org.apache.jena:apache-jena-libs:2.11.1')   {
    exclude group: 'org.slf4j', module: 'slf4j-log4j12'
}

然后事情又开始了。

您遇到的问题由以下异常确定(与上面给出的根本原因相同)


原因:java.security.AccessControlException:拒绝访问(“java.lang.RuntimePermission”“createSecurityManager”)
位于java.security.AccessControlContext.checkPermission(AccessControlContext.java:382)
在java.security.AccessController.checkPermission(AccessController.java:572)中
位于java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
位于java.lang.SecurityManager。(SecurityManager.java:299)
在org.slf4j.helpers.Util$ClassContextSecurityManager上。(Util.java:43)
位于org.slf4j.helpers.Util$ClassContextSecurityManag
Caused by: java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "createSecurityManager")
  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 java.lang.SecurityManager.<init>(SecurityManager.java:299)
  at org.slf4j.helpers.Util$ClassContextSecurityManager.<init>(Util.java:43)
  at org.slf4j.helpers.Util$ClassContextSecurityManager.<init>(Util.java:43)
  at org.slf4j.helpers.Util.<clinit>(Util.java:49)