You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@shiro.apache.org by highroller <vi...@gmail.com> on 2014/08/15 21:54:02 UTC

Google App Engine doesn't like Shiro Session Creating New Thread

Hi,
  I am using Google App Engine, and I am using using Shiro in my Google App
Engine endpoint.  Every time it runs to "Session originalSession =
subject.getSession();", it throws the following exception.  It seems that
App Engine doesn't like app spawning new thread for security reason.  Is
there reason why Shiro has to spawn new thread when creating new session? 
Is there anyway to solve or go around this problem?  Thanks.

Aug 15, 2014 12:48:18 PM com.google.api.server.spi.SystemService
invokeServiceMethod
SEVERE: access denied ("java.lang.RuntimePermission" "modifyThreadGroup")
java.security.AccessControlException: access denied
("java.lang.RuntimePermission" "modifyThreadGroup")
	at
java.security.AccessControlContext.checkPermission(AccessControlContext.java:457)
	at
java.security.AccessController.checkPermission(AccessController.java:884)
	at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
	at
com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:429)
	at
com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkAccess(DevAppServerFactory.java:454)
	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:461)
	at
org.apache.shiro.session.mgt.ExecutorServiceSessionValidationScheduler$1.newThread(ExecutorServiceSessionValidationScheduler.java:87)
	at
java.util.concurrent.ThreadPoolExecutor$Worker.<init>(ThreadPoolExecutor.java:612)
	at
java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:925)
	at
java.util.concurrent.ThreadPoolExecutor.ensurePrestart(ThreadPoolExecutor.java:1587)
	at
java.util.concurrent.ScheduledThreadPoolExecutor.delayedExecute(ScheduledThreadPoolExecutor.java:334)
	at
java.util.concurrent.ScheduledThreadPoolExecutor.scheduleAtFixedRate(ScheduledThreadPoolExecutor.java:573)
	at
java.util.concurrent.Executors$DelegatedScheduledExecutorService.scheduleAtFixedRate(Executors.java:735)
	at
org.apache.shiro.session.mgt.ExecutorServiceSessionValidationScheduler.enableSessionValidation(ExecutorServiceSessionValidationScheduler.java:92)
	at
org.apache.shiro.session.mgt.AbstractValidatingSessionManager.enableSessionValidation(AbstractValidatingSessionManager.java:232)
	at
org.apache.shiro.session.mgt.AbstractValidatingSessionManager.enableSessionValidationIfNecessary(AbstractValidatingSessionManager.java:86)
	at
org.apache.shiro.session.mgt.AbstractValidatingSessionManager.createSession(AbstractValidatingSessionManager.java:135)
	at
org.apache.shiro.session.mgt.AbstractNativeSessionManager.start(AbstractNativeSessionManager.java:59)
	at
org.apache.shiro.mgt.SessionsSecurityManager.start(SessionsSecurityManager.java:121)
	at
org.apache.shiro.subject.support.DelegatingSubject.getSession(DelegatingSubject.java:336)
	at
org.apache.shiro.subject.support.DelegatingSubject.getSession(DelegatingSubject.java:312)
	at
com.example.my.broadcast.backend.engine.user.UserEndpoint.login(UserEndpoint.java:91)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:483)
	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.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
	at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at
com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:127)
	at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at
com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
	at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at
com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
	at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at
com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
	at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at
com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
	at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at
com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)
	at
com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349)
	at
com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
	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
com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at
com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:490)
	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.content(HttpConnection.java:938)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
	at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
	at
org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)




--
View this message in context: http://shiro-user.582556.n2.nabble.com/Google-App-Engine-doesn-t-like-Shiro-Session-Creating-New-Thread-tp7580155.html
Sent from the Shiro User mailing list archive at Nabble.com.

Re: Google App Engine doesn't like Shiro Session Creating New Thread

Posted by Brian Demers <br...@gmail.com>.
Take a look at this example: https://github.com/cilogi/gaeshiro

Can you post a reproduce case for this ideally in jira:
https://issues.apache.org/jira/browse/SHIRO


On Fri, Aug 15, 2014 at 3:54 PM, highroller <vi...@gmail.com> wrote:

> Hi,
>   I am using Google App Engine, and I am using using Shiro in my Google App
> Engine endpoint.  Every time it runs to "Session originalSession =
> subject.getSession();", it throws the following exception.  It seems that
> App Engine doesn't like app spawning new thread for security reason.  Is
> there reason why Shiro has to spawn new thread when creating new session?
> Is there anyway to solve or go around this problem?  Thanks.
>
> Aug 15, 2014 12:48:18 PM com.google.api.server.spi.SystemService
> invokeServiceMethod
> SEVERE: access denied ("java.lang.RuntimePermission" "modifyThreadGroup")
> java.security.AccessControlException: access denied
> ("java.lang.RuntimePermission" "modifyThreadGroup")
>         at
>
> java.security.AccessControlContext.checkPermission(AccessControlContext.java:457)
>         at
> java.security.AccessController.checkPermission(AccessController.java:884)
>         at
> java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
>         at
>
> com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:429)
>         at
>
> com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkAccess(DevAppServerFactory.java:454)
>         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:461)
>         at
>
> org.apache.shiro.session.mgt.ExecutorServiceSessionValidationScheduler$1.newThread(ExecutorServiceSessionValidationScheduler.java:87)
>         at
>
> java.util.concurrent.ThreadPoolExecutor$Worker.<init>(ThreadPoolExecutor.java:612)
>         at
>
> java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:925)
>         at
>
> java.util.concurrent.ThreadPoolExecutor.ensurePrestart(ThreadPoolExecutor.java:1587)
>         at
>
> java.util.concurrent.ScheduledThreadPoolExecutor.delayedExecute(ScheduledThreadPoolExecutor.java:334)
>         at
>
> java.util.concurrent.ScheduledThreadPoolExecutor.scheduleAtFixedRate(ScheduledThreadPoolExecutor.java:573)
>         at
>
> java.util.concurrent.Executors$DelegatedScheduledExecutorService.scheduleAtFixedRate(Executors.java:735)
>         at
>
> org.apache.shiro.session.mgt.ExecutorServiceSessionValidationScheduler.enableSessionValidation(ExecutorServiceSessionValidationScheduler.java:92)
>         at
>
> org.apache.shiro.session.mgt.AbstractValidatingSessionManager.enableSessionValidation(AbstractValidatingSessionManager.java:232)
>         at
>
> org.apache.shiro.session.mgt.AbstractValidatingSessionManager.enableSessionValidationIfNecessary(AbstractValidatingSessionManager.java:86)
>         at
>
> org.apache.shiro.session.mgt.AbstractValidatingSessionManager.createSession(AbstractValidatingSessionManager.java:135)
>         at
>
> org.apache.shiro.session.mgt.AbstractNativeSessionManager.start(AbstractNativeSessionManager.java:59)
>         at
>
> org.apache.shiro.mgt.SessionsSecurityManager.start(SessionsSecurityManager.java:121)
>         at
>
> org.apache.shiro.subject.support.DelegatingSubject.getSession(DelegatingSubject.java:336)
>         at
>
> org.apache.shiro.subject.support.DelegatingSubject.getSession(DelegatingSubject.java:312)
>         at
>
> com.example.my.broadcast.backend.engine.user.UserEndpoint.login(UserEndpoint.java:91)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at
>
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>         at
>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:483)
>         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.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
>         at
>
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
>         at
>
> com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:127)
>         at
>
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
>         at
>
> com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
>         at
>
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
>         at
>
> com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
>         at
>
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
>         at
>
> com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
>         at
>
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
>         at
>
> com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
>         at
>
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
>         at
>
> com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)
>         at
>
> com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349)
>         at
>
> com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
>         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
>
> com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98)
>         at
> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
>         at
>
> com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:490)
>         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.content(HttpConnection.java:938)
>         at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
>         at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
>         at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
>         at
>
> org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
>         at
>
> org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
>
>
>
>
> --
> View this message in context:
> http://shiro-user.582556.n2.nabble.com/Google-App-Engine-doesn-t-like-Shiro-Session-Creating-New-Thread-tp7580155.html
> Sent from the Shiro User mailing list archive at Nabble.com.
>