[ 
https://issues.apache.org/jira/browse/WICKET-6126?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Martin Cassidy updated WICKET-6126:
-----------------------------------
    Description: 
I'm combing Wicket, wicket stuff portlets and Apache Pluto to create 
portal/portlet application.

Some portlets exist within the same context as the portal application, which 
means the I have 2 wicket filters and 2 wicket applications running in the same 
context.

The standard wicket filter serves the portal requests and matches /* patterns, 
the PortletFilter from wicketstuff matches /PlutoInvoker/*

Each filter uses a different application class (I did try using just one 
application and one filter but this didn't work because of what PortletFilter 
does to the the application it's attached to)

I'm not sure about other servlet containers, but at least on undertow with 
Wildfly 10, filters are not initialised until the first time that they are 
called upon to process a request.

Whilst the WicketFilter doFilter() method can handle multple invocations per 
request by saving and restoring the ThreadContext, the init() does not do this 
which means for the first request to the application the invocation order is:

# WicketFilter.init()
# WicketFilter.doFilter()
# PortletFilter.init()
# PortletFilter.doFilter()

Which causes the following:

{code}
14:49:03,986 ERROR [io.undertow.request] (default task-13) UT005023: Exception 
handling request to /: javax.servlet.ServletException: Filtered request failed.
        at 
org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:384)
        at 
org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
        at 
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
        at 
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
        at 
io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60)
        at 
io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
        at 
io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
        at 
io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
        at 
io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
        at 
org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
        at 
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at 
io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
        at 
io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
        at 
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at 
io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
        at 
io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
        at 
io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
        at 
io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
        at 
io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
        at 
io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
        at 
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at 
org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
        at 
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at 
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at 
io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:284)
        at 
io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:263)
        at 
io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
        at 
io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:174)
        at io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)
        at 
io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:793)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.wicket.WicketRuntimeException: There is no application 
attached to current thread default task-13
        at org.apache.wicket.Application.get(Application.java:236)
        at org.apache.wicket.Session.exists(Session.java:144)
        at 
org.apache.wicket.request.cycle.RequestCycle.onInternalDetach(RequestCycle.java:611)
        at 
org.apache.wicket.request.cycle.RequestCycle.detach(RequestCycle.java:600)
        at 
org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:297)
        at 
org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:261)
        at 
org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:203)
        at 
org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:284)
        at 
io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60)
        at 
io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
        at 
org.apache.pluto.driver.PortalDriverFilter.doFilter(PortalDriverFilter.java:130)
        at 
io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60)
        at 
io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
        at 
org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
        at 
org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
        at 
org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
        at 
org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
        at 
org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
        at 
org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
        ... 32 more
{code}

The 2nd and any subsequent requests are fine, as the init()s have run and 
doFilter() handles the ThreadContext correctly.

  was:
I'm combing Wicket, wicket stuff portlets and Apache Pluto to create 
portal/portlet application.

Some portlets exist within the same context as the portal application, which 
means the I have 2 wicket filters and 2 wicket applications running in the same 
context.

The standard wicket filter serves the portal requests and matches /* patterns, 
the PortletFilter from wicketstuff matches /PlutoInvoker/*

Each filter uses a different application class (I did try using just one 
application and one filter but this didn't work because of what PortletFilter 
does to the the application it's attached to)

I'm not sure about other servlet containers, but at least on undertow with 
Wildfly 10, filters are not initialised until the first time that they called 
upon to process a request.

Whilst the WicketFilter doFilter() method can handle multple invocations per 
request by saving and restoring the ThreadContext, the init() does not do this 
which means for the first request to the application the invocation order is:

# WicketFilter.init()
# WicketFilter.doFilter()
# PortletFilter.init()
# PortletFilter.doFilter()

Which causes the following:

{code}
14:49:03,986 ERROR [io.undertow.request] (default task-13) UT005023: Exception 
handling request to /: javax.servlet.ServletException: Filtered request failed.
        at 
org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:384)
        at 
org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
        at 
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
        at 
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
        at 
io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60)
        at 
io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
        at 
io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
        at 
io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
        at 
io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
        at 
org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
        at 
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at 
io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
        at 
io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
        at 
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at 
io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
        at 
io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
        at 
io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
        at 
io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
        at 
io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
        at 
io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
        at 
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at 
org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
        at 
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at 
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at 
io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:284)
        at 
io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:263)
        at 
io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
        at 
io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:174)
        at io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)
        at 
io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:793)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.wicket.WicketRuntimeException: There is no application 
attached to current thread default task-13
        at org.apache.wicket.Application.get(Application.java:236)
        at org.apache.wicket.Session.exists(Session.java:144)
        at 
org.apache.wicket.request.cycle.RequestCycle.onInternalDetach(RequestCycle.java:611)
        at 
org.apache.wicket.request.cycle.RequestCycle.detach(RequestCycle.java:600)
        at 
org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:297)
        at 
org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:261)
        at 
org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:203)
        at 
org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:284)
        at 
io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60)
        at 
io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
        at 
org.apache.pluto.driver.PortalDriverFilter.doFilter(PortalDriverFilter.java:130)
        at 
io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60)
        at 
io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
        at 
org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
        at 
org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
        at 
org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
        at 
org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
        at 
org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
        at 
org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
        ... 32 more
{code}

The 2nd and any subsequent requests are fine, as the init()s have run and 
doFilter() handles the ThreadContext correctly.


> ThreadContext in WicketFilter init()
> ------------------------------------
>
>                 Key: WICKET-6126
>                 URL: https://issues.apache.org/jira/browse/WICKET-6126
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>            Reporter: Martin Cassidy
>            Priority: Minor
>
> I'm combing Wicket, wicket stuff portlets and Apache Pluto to create 
> portal/portlet application.
> Some portlets exist within the same context as the portal application, which 
> means the I have 2 wicket filters and 2 wicket applications running in the 
> same context.
> The standard wicket filter serves the portal requests and matches /* 
> patterns, the PortletFilter from wicketstuff matches /PlutoInvoker/*
> Each filter uses a different application class (I did try using just one 
> application and one filter but this didn't work because of what PortletFilter 
> does to the the application it's attached to)
> I'm not sure about other servlet containers, but at least on undertow with 
> Wildfly 10, filters are not initialised until the first time that they are 
> called upon to process a request.
> Whilst the WicketFilter doFilter() method can handle multple invocations per 
> request by saving and restoring the ThreadContext, the init() does not do 
> this which means for the first request to the application the invocation 
> order is:
> # WicketFilter.init()
> # WicketFilter.doFilter()
> # PortletFilter.init()
> # PortletFilter.doFilter()
> Which causes the following:
> {code}
> 14:49:03,986 ERROR [io.undertow.request] (default task-13) UT005023: 
> Exception handling request to /: javax.servlet.ServletException: Filtered 
> request failed.
>       at 
> org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:384)
>       at 
> org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
>       at 
> org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
>       at 
> org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
>       at 
> io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60)
>       at 
> io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
>       at 
> io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
>       at 
> io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
>       at 
> io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
>       at 
> org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
>       at 
> io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
>       at 
> io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
>       at 
> io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
>       at 
> io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
>       at 
> io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
>       at 
> io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
>       at 
> io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
>       at 
> io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
>       at 
> io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
>       at 
> io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
>       at 
> io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
>       at 
> org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
>       at 
> io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
>       at 
> io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
>       at 
> io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:284)
>       at 
> io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:263)
>       at 
> io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
>       at 
> io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:174)
>       at io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)
>       at 
> io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:793)
>       at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>       at java.lang.Thread.run(Thread.java:745)
> Caused by: org.apache.wicket.WicketRuntimeException: There is no application 
> attached to current thread default task-13
>       at org.apache.wicket.Application.get(Application.java:236)
>       at org.apache.wicket.Session.exists(Session.java:144)
>       at 
> org.apache.wicket.request.cycle.RequestCycle.onInternalDetach(RequestCycle.java:611)
>       at 
> org.apache.wicket.request.cycle.RequestCycle.detach(RequestCycle.java:600)
>       at 
> org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:297)
>       at 
> org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:261)
>       at 
> org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:203)
>       at 
> org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:284)
>       at 
> io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60)
>       at 
> io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
>       at 
> org.apache.pluto.driver.PortalDriverFilter.doFilter(PortalDriverFilter.java:130)
>       at 
> io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60)
>       at 
> io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
>       at 
> org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
>       at 
> org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
>       at 
> org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
>       at 
> org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
>       at 
> org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
>       at 
> org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
>       ... 32 more
> {code}
> The 2nd and any subsequent requests are fine, as the init()s have run and 
> doFilter() handles the ThreadContext correctly.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to