Cometd + Acegi context filter issue

13 views
Skip to first unread message

JigarPrajapati

unread,
Aug 28, 2008, 4:32:20 AM8/28/08
to cometd-users
Hi,

When i try to integrate cometd chat application in my application
then i am getting below exception. I have configured acegi context
filter in web.xml. if i remove then cometd dojo implementation works
fine. but if i keep acegi configuration in my web.xml then it gives
below browser error. also java stacktrace is given below.

Firebug Console output
-----------------------------------------

SyntaxError: syntax error message=syntax error
dojo.js.uncompres... (line 2473)
tunnel opening failed: SyntaxError: syntax error message=syntax
error cometd.js.uncompr... (line 1005)
Retry in interval+backoff=0+7000=7000ms
cometd.js.uncompr... (line 695)


Below is stack trace of issue.

Stack trace:
--------------------

org.mortbay.jetty.RetryRequest
at org.mortbay.jetty.nio.SelectChannelConnector
$RetryContinuation.suspend(SelectChannelConnector.java:440)
at
org.mortbay.cometd.continuation.ContinuationCometdServlet.doPost(ContinuationCometdServlet.java:
161)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:
727)
at
org.mortbay.cometd.AbstractCometdServlet.service(AbstractCometdServlet.java:
218)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:
820)
at
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1093)
at
com.planetj.servlet.filter.compression.CompressingFilter.doFilter(CompressingFilter.java:
222)
at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1084)
at
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:
414)
at
net.sigmainfo.blackwells.filter.ChildFilterDispatcher.doFilter(ChildFilterDispatcher.java:
48)
at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1084)
at org.acegisecurity.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:264)
at
org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:
217)
at org.acegisecurity.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at
org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:
217)
at org.acegisecurity.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at
org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:
217)
at org.acegisecurity.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at
org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:
217)
at org.acegisecurity.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at
org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:
217)
at org.acegisecurity.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at
org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:
107)
at
org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:
72)
at org.acegisecurity.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at
org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:
110)
at org.acegisecurity.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at
org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:
125)
at org.acegisecurity.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at
org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:
135)
at org.acegisecurity.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at
org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:
81)
at org.acegisecurity.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at
org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:
217)
at org.acegisecurity.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at
org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:
217)
at org.acegisecurity.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at
org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:
217)
at org.acegisecurity.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at
org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:
217)
at org.acegisecurity.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at
org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:
217)
at org.acegisecurity.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at
org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:
217)
at org.acegisecurity.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at
org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:
217)
at org.acegisecurity.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at
org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:
217)
at org.acegisecurity.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at
org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java:
106)
at org.acegisecurity.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at
org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java:
106)
at org.acegisecurity.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at
org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:
229)
at org.acegisecurity.util.FilterChainProxy
$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at
org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:
148)
at
org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:
98)
at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1084)
at
org.apache.activemq.web.SessionFilter.doFilter(SessionFilter.java:47)
at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1084)
at
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:
198)
at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:
75)
at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1084)
at
net.sigmainfo.blackwells.filter.ContextFilter.doFilter(ContextFilter.java:
63)
at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1084)
at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:
360)
at
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:
216)
at
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:
181)
at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:
726)
at
org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:
206)
at
org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:
114)
at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
505)
at org.mortbay.jetty.HttpConnection
$RequestHandler.content(HttpConnection.java:842)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:648)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:
211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:
380)
at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:
395)
at org.mortbay.thread.BoundedThreadPool
$PoolThread.run(BoundedThreadPool.java:450)


Please help,

Regards,
Jigar

Greg Wilkins

unread,
Sep 6, 2008, 9:36:13 PM9/6/08
to cometd...@googlegroups.com
Jigar,

sorry for the glacially slow response (holidays, work load and other excuses).

The org.mortbay.jetty.RetryRequest exception is part of the asynchronous
handling provided by jetty to allow cometd to scale.

The acegi filter must be catching that exception. It should allow that
exception to propagate to the container to be handled. Can you give me
some more information about the source and version of that filter
and I can chase up to see if we can get that modified.

Alternately, try jetty7 and the suspendable cometd servlet. That
does not use an exception for the asynchronous suspend and thus may
work immediately with acegi.

If that still fails, then try jetty7 with the continuation cometd servlet,
as that still uses the exception, but in a form less likely to be
caught by the filter.

cheers

Jigar Prajapati

unread,
Sep 8, 2008, 1:27:08 AM9/8/08
to Greg Wilkins, cometd...@googlegroups.com
Hi Greg,

Following is the filter config

<!-- acegi filter declaration-->
    <filter>
        <filter-name>Acegi Filter Chain Proxy</filter-name>
        <filter-class>
            org.acegisecurity.util.FilterToBeanProxy
        </filter-class>
        <init-param>
            <param-name>targetClass</param-name>
            <param-value>
                org.acegisecurity.util.FilterChainProxy
            </param-value>
        </init-param>
    </filter>

<!-- acegi filter mapping declaration-->
    <filter-mapping>
        <filter-name>Acegi Filter Chain Proxy</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

We're using acegi-security-1.0.3.jar for our Acegi setup.

Can we use Jetty 7 for production purpose??

Please advice.
.
Thanks
Jigar
--
Regards,
Jigar

Greg Wilkins

unread,
Sep 8, 2008, 9:51:31 PM9/8/08
to Jigar Prajapati, cometd...@googlegroups.com

Jetty-7 is the development branch, so there is some additional
risk putting it into production.

However, it is in use on production sites already.

we'll have a quick look at the acegi filter. It should be
able to be modified to handle the continuations. We can talk
you through doing that on the list. We will also look at
it ourselves, but no guarantees when.

regards


Jigar Prajapati wrote:
> Hi Greg,
>

> Following is the filter config/
> /

Greg Wilkins

unread,
Sep 8, 2008, 10:14:32 PM9/8/08
to cometd...@googlegroups.com

Jigar,

I'm looking again at your stack trace, and I'm noticing a few other
things that could be an issue.

I've had a quick look at the acegi source code and I can't see
where it is catching the Retry exception. So it may not be acegi?

certainly not in $VirtualFilterChain.doFilter(FilterChainProxy.java:274)


I noticed also that you have

com.planetj.servlet.filter.compression.CompressingFilter.doFilter(CompressingFilter.java:

Can you try removing that? If you want compression Jetty comes with a
GzipFilter that is tested to work with continuations.


Other than that, we need to find who is catching the exception.
Candidates include

org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java
net.sigmainfo.blackwells.filter.ChildFilterDispatcher.doFilter(ChildFilterDispatcher.java
org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:
org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:
org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:
org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:
org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:
org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:
org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java:
org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:
org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:
net.sigmainfo.blackwells.filter.ContextFilter.doFilter(ContextFilter.java:


Wow that is a lot of filters on the request path!!! and I've skipped a lot of duplicates.

So I would firstly remove as many of those as possible from the cometd request path.
I totally understand why you want/need acegi on cometd, but it would be good to remove
things like struts from the cometd path.

Can you look through the source of all those filters (ie walk the stack dump that
you have) and see which of them catch exceptions? once we've identified who
is catching RuntimeExceptions, the work around is pretty simple.

Although with the nature of continuations.... we may need to checkout
what org.springframework.web.filter.OncePerRequestFilter.doFilter is doing???

cheers


Athena Yao

unread,
Sep 9, 2008, 2:35:05 AM9/9/08
to cometd...@googlegroups.com
Jigar,

It doesn't look like the acegi filter is the cause of the problem (or at
least, not alone). I tested by setting up acegi using the config that
you provided, and put it in front of a normally configured cometd
servlet -- demo ran without any errors.

I'd suggest you try investigating/taking out the filters that Greg
suggested, to narrow down the culprit.

Cheers,
Athena

Reply all
Reply to author
Forward
0 new messages