You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Jonathan Barker <jo...@gmail.com> on 2012/01/10 17:00:51 UTC

PageTester with tapestry-security: No SecurityManager accessible to the calling code

We are attempting to use PageTester with an application using
tapestry-security, and are running into a problem on any secured
pages, where there is no SecurityManager available.  I think I
understand the problem, but I suspect that someone has already put in
the effort to move from understanding to solution.

Has anyone figured out how to provide a Shiro SecurityManager when
using PageTester?

T 5.3.0
tapestry-security 0.4.0
shiro 1.1.0

Regards,
Jonathan


[ERROR] pages.Login Render queue error in
BeforeRenderBody[Login:layout.authenticated]: No SecurityManager
accessible to the calling code, either bound to the
org.apache.shiro.util.ThreadContext or as a vm static singleton.  This
is an invalid application configuration.

org.apache.tapestry5.ioc.internal.util.TapestryException: No
SecurityManager accessible to the calling code, either bound to the
org.apache.shiro.util.ThreadContext or as a vm static singleton.  This
is an invalid application configuration. [at
classpath:ca/itstrategic/tls/dncl/client/components/Layout.tml, line
38]

at org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.invoke(ComponentPageElementImpl.java:209)

at org.apache.tapestry5.internal.structure.ComponentPageElementImpl$BeforeRenderBodyPhase.render(ComponentPageElementImpl.java:362)

at org.apache.tapestry5.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:72)

at org.apache.tapestry5.internal.services.PageRenderQueueImpl.render(PageRenderQueueImpl.java:127)

at $PageRenderQueue_1267a5cb4bf2f634.render(Unknown Source)

at $PageRenderQueue_1267a5cb4bf2f62c.render(Unknown Source)

at org.apache.tapestry5.internal.services.MarkupRendererTerminator.renderMarkup(MarkupRendererTerminator.java:37)

at org.apache.tapestry5.services.TapestryModule$30.renderMarkup(TapestryModule.java:2147)

at $MarkupRenderer_1267a5cb4bf2f636.renderMarkup(Unknown Source)

at org.apache.tapestry5.services.TapestryModule$29.renderMarkup(TapestryModule.java:2131)

at $MarkupRenderer_1267a5cb4bf2f636.renderMarkup(Unknown Source)

at org.apache.tapestry5.services.TapestryModule$28.renderMarkup(TapestryModule.java:2113)

at $MarkupRenderer_1267a5cb4bf2f636.renderMarkup(Unknown Source)

at org.apache.tapestry5.services.TapestryModule$27.renderMarkup(TapestryModule.java:2098)

at $MarkupRenderer_1267a5cb4bf2f636.renderMarkup(Unknown Source)

at org.apache.tapestry5.services.TapestryModule$26.renderMarkup(TapestryModule.java:2084)

at $MarkupRenderer_1267a5cb4bf2f636.renderMarkup(Unknown Source)

at org.apache.tapestry5.services.TapestryModule$25.renderMarkup(TapestryModule.java:2066)

at $MarkupRenderer_1267a5cb4bf2f636.renderMarkup(Unknown Source)

at org.apache.tapestry5.services.TapestryModule$24.renderMarkup(TapestryModule.java:2047)

at $MarkupRenderer_1267a5cb4bf2f636.renderMarkup(Unknown Source)

at org.apache.tapestry5.internal.test.CaptureRenderedDocument.renderMarkup(CaptureRenderedDocument.java:39)

at $MarkupRenderer_1267a5cb4bf2f636.renderMarkup(Unknown Source)

at $MarkupRenderer_1267a5cb4bf2f633.renderMarkup(Unknown Source)

at org.apache.tapestry5.internal.services.PageMarkupRendererImpl.renderPageMarkup(PageMarkupRendererImpl.java:47)

at $PageMarkupRenderer_1267a5cb4bf2f631.renderPageMarkup(Unknown Source)

at org.apache.tapestry5.internal.services.PageResponseRendererImpl.renderPageResponse(PageResponseRendererImpl.java:67)

at $PageResponseRenderer_1267a5cb4bf2f4b7.renderPageResponse(Unknown Source)

at org.apache.tapestry5.internal.services.PageRenderRequestHandlerImpl.handle(PageRenderRequestHandlerImpl.java:64)

at org.apache.tapestry5.services.TapestryModule$37.handle(TapestryModule.java:2376)

at $PageRenderRequestHandler_1267a5cb4bf2f4b9.handle(Unknown Source)

at $PageRenderRequestHandler_1267a5cb4bf2f4b1.handle(Unknown Source)

at org.apache.tapestry5.internal.services.ComponentRequestHandlerTerminator.handlePageRender(ComponentRequestHandlerTerminator.java:48)

at org.apache.tapestry5.services.InitializeActivePageName.handlePageRender(InitializeActivePageName.java:47)

at $ComponentRequestHandler_1267a5cb4bf2f4b2.handlePageRender(Unknown Source)

at org.tynamo.security.SecurityComponentRequestFilter.handlePageRender(SecurityComponentRequestFilter.java:50)

at $ComponentRequestFilter_1267a5cb4bf2f4af.handlePageRender(Unknown Source)

at $ComponentRequestHandler_1267a5cb4bf2f4b2.handlePageRender(Unknown Source)

at $ComponentRequestHandler_1267a5cb4bf2f492.handlePageRender(Unknown Source)

at org.apache.tapestry5.internal.services.PageRenderDispatcher.dispatch(PageRenderDispatcher.java:45)

at $Dispatcher_1267a5cb4bf2f494.dispatch(Unknown Source)

at $Dispatcher_1267a5cb4bf2f48c.dispatch(Unknown Source)

at org.apache.tapestry5.services.TapestryModule$RequestHandlerTerminator.service(TapestryModule.java:434)

at org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26)

at $RequestHandler_1267a5cb4bf2f48e.service(Unknown Source)

at org.apache.tapestry5.services.TapestryModule$3.service(TapestryModule.java:1055)

at $RequestHandler_1267a5cb4bf2f48e.service(Unknown Source)

at org.apache.tapestry5.services.TapestryModule$2.service(TapestryModule.java:1045)

at $RequestHandler_1267a5cb4bf2f48e.service(Unknown Source)

at org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:90)

at $RequestHandler_1267a5cb4bf2f48e.service(Unknown Source)

at ca.itstrategic.tls.dncl.client.services.AppModule$1.service(AppModule.java:110)

at $RequestFilter_1267a5cb4bf2f488.service(Unknown Source)

at $RequestHandler_1267a5cb4bf2f48e.service(Unknown Source)

at org.apache.tapestry5.internal.test.EndOfRequestCleanupFilter.service(EndOfRequestCleanupFilter.java:42)

at $RequestHandler_1267a5cb4bf2f48e.service(Unknown Source)

at org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:105)

at org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:95)

at org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:85)

at org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:119)

at $RequestHandler_1267a5cb4bf2f48e.service(Unknown Source)

at $RequestHandler_1267a5cb4bf2f481.service(Unknown Source)

at org.apache.tapestry5.test.PageTester.renderPageAndReturnResponse(PageTester.java:212)

at org.apache.tapestry5.test.PageTester.renderPage(PageTester.java:182)

at ca.itstrategic.tls.dncl.client.pages.MainMenuTest.test1(MainMenuTest.java:36)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:643)

at org.testng.internal.Invoker.invokeMethod(Invoker.java:559)

at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:723)

at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1027)

at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:137)

at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:121)

at org.testng.TestRunner.runWorkers(TestRunner.java:1030)

at org.testng.TestRunner.privateRun(TestRunner.java:709)

at org.testng.TestRunner.run(TestRunner.java:579)

at org.testng.SuiteRunner.runTest(SuiteRunner.java:331)

at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:326)

at org.testng.SuiteRunner.privateRun(SuiteRunner.java:288)

at org.testng.SuiteRunner.run(SuiteRunner.java:193)

at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:910)

at org.testng.TestNG.runSuitesLocally(TestNG.java:879)

at org.testng.TestNG.run(TestNG.java:787)

at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:62)

at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.execute(TestNGDirectoryTestSuite.java:141)

at org.apache.maven.surefire.Surefire.run(Surefire.java:177)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345)

at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009)






-- 
Jonathan Barker
ITStrategic

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: PageTester with tapestry-security: No SecurityManager accessible to the calling code

Posted by Kalle Korhonen <ka...@gmail.com>.
On Tue, Jan 10, 2012 at 8:00 AM, Jonathan Barker
<jo...@gmail.com> wrote:
> We are attempting to use PageTester with an application using
> tapestry-security, and are running into a problem on any secured
> pages, where there is no SecurityManager available.  I think I
> understand the problem, but I suspect that someone has already put in
> the effort to move from understanding to solution.
> Has anyone figured out how to provide a Shiro SecurityManager when
> using PageTester?

There was a previous thread on the same issue with some answers:
On Thu, Oct 27, 2011 at 10:38 AM, Kalle Korhonen
<ka...@gmail.com> wrote:
> The securityManager is bound to the executing thread. You'd need to
> invoke (Tapestry's) request processing pipeline to get it bound, or
> perhaps directly operate Tynamo's SecurityConfiguration directly to
> bind it. Any solution likely involves some hacking.

On Fri, Nov 25, 2011 at 4:54 PM, Robert Zeigler
<ro...@roxanemy.com> wrote:
> 1) Create your page tester instance: PageTester tester = new PageTester("packagename","Appname","contextpath");
> 2) get the registry from the page tester : tester.getRegistry();
> 3) Get the RequestGlobals service from the registry: RequestGlobals globals = registry.getService(RequestGlobals.class);
> 4) store your overrides: globals.storeServletRequestResponse(customRequest, customResponse);
> You can use a mock framework (easymock, etc.) to make your life easier in overriding the services servlet request/response.

What Robert says is pretty concrete, but I don't think storing the
request/response alone addresses the issue. It's very easy to bind the
securityManager to the thread:
org.apache.shiro.util.ThreadContext.bind(securityManager);

Unfortunately I haven't used PageTester together with security so I
don't have a guaranteed solution.

Kalle

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org