Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [jetty-users] Filter problem

Ok, some more debugging reveals that this is not a loop, but instead the filter being present twice in the chain. Since I had a check in place, it failed on the second invocation, making it look like a loop.

The reason it's in there twice was that I had defined both servletNames and urlPatterns on the @WebFilter annotation. It‘s not clear to me if it’s correct behavior to have the filter invoked twice (in the chain twice) when there's an overlap between servlet names and url patterns.



On Sat, Sep 7, 2013 at 5:07 PM, Nils Kilden-Pedersen <nilskp@xxxxxxxxx> wrote:

This is 9.0.5.

I'm having an issue with an infinite loop in a filter.

I assume this is a bug, but I don't know enough about the Jetty internals to say where exactly.

Basically, my code (the Filter) wraps the request using HttpServletRequestWrapper and then calls chain.doFilter(wrappedRequest, response)

The chain instance is ServletHandler$CachedChain and doFilter looks like this:

1465        public void doFilter(ServletRequest request, ServletResponse response)
1466            throws IOException, ServletException
1467        {
1468            final Request baseRequest=(request instanceof Request)?((Request)request):HttpChannel.getCurrentHttpChannel().getRequest();
1469
1470            // pass to next filter
1471            if (_filterHolder!=null)
1472            {
1473                if (LOG.isDebugEnabled())
1474                    LOG.debug("call filter " + _filterHolder);
1475                Filter filter= _filterHolder.getFilter();
1476                if (_filterHolder.isAsyncSupported())
1477                    filter.doFilter(request, response, _next);
1478                else

I have asyncSupported = true and the filter retrieved on line 1475 is my filter that just called this method, which it then proceeds to call again on line 1477, which leads to the infinite loop.

Hope that's good enough.



Back to the top