Issue #1050
This commit is contained in:
parent
ca882c8dee
commit
8461cc07b3
|
@ -109,32 +109,37 @@ public class FilterHolder extends Holder<Filter>
|
|||
@Override
|
||||
public void initialize() throws Exception
|
||||
{
|
||||
super.initialize();
|
||||
|
||||
if (_filter==null)
|
||||
if (!_initialized)
|
||||
{
|
||||
try
|
||||
{
|
||||
ServletContext context=_servletHandler.getServletContext();
|
||||
_filter=(context instanceof ServletContextHandler.Context)
|
||||
?((ServletContextHandler.Context)context).createFilter(getHeldClass())
|
||||
:getHeldClass().newInstance();
|
||||
}
|
||||
catch (ServletException se)
|
||||
{
|
||||
Throwable cause = se.getRootCause();
|
||||
if (cause instanceof InstantiationException)
|
||||
throw (InstantiationException)cause;
|
||||
if (cause instanceof IllegalAccessException)
|
||||
throw (IllegalAccessException)cause;
|
||||
throw se;
|
||||
}
|
||||
}
|
||||
super.initialize();
|
||||
|
||||
_config=new Config();
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.debug("Filter.init {}",_filter);
|
||||
_filter.init(_config);
|
||||
if (_filter==null)
|
||||
{
|
||||
try
|
||||
{
|
||||
ServletContext context=_servletHandler.getServletContext();
|
||||
_filter=(context instanceof ServletContextHandler.Context)
|
||||
?((ServletContextHandler.Context)context).createFilter(getHeldClass())
|
||||
:getHeldClass().newInstance();
|
||||
}
|
||||
catch (ServletException se)
|
||||
{
|
||||
Throwable cause = se.getRootCause();
|
||||
if (cause instanceof InstantiationException)
|
||||
throw (InstantiationException)cause;
|
||||
if (cause instanceof IllegalAccessException)
|
||||
throw (IllegalAccessException)cause;
|
||||
throw se;
|
||||
}
|
||||
}
|
||||
|
||||
_config=new Config();
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.debug("Filter.init {}",_filter);
|
||||
_filter.init(_config);
|
||||
}
|
||||
|
||||
_initialized = true;
|
||||
}
|
||||
|
||||
|
||||
|
@ -158,6 +163,7 @@ public class FilterHolder extends Holder<Filter>
|
|||
_filter=null;
|
||||
|
||||
_config=null;
|
||||
_initialized = false;
|
||||
super.doStop();
|
||||
}
|
||||
|
||||
|
|
|
@ -53,6 +53,7 @@ public class Holder<T> extends BaseHolder<T>
|
|||
protected String _displayName;
|
||||
protected boolean _asyncSupported;
|
||||
protected String _name;
|
||||
protected boolean _initialized = false;
|
||||
|
||||
|
||||
/* ---------------------------------------------------------------- */
|
||||
|
|
|
@ -73,7 +73,6 @@ public class ServletHolder extends Holder<Servlet> implements UserIdentity.Scope
|
|||
private static final Logger LOG = Log.getLogger(ServletHolder.class);
|
||||
private int _initOrder = -1;
|
||||
private boolean _initOnStartup=false;
|
||||
private boolean _initialized = false;
|
||||
private Map<String, String> _roleMap;
|
||||
private String _forcedPath;
|
||||
private String _runAsRole;
|
||||
|
@ -410,7 +409,8 @@ public class ServletHolder extends Holder<Servlet> implements UserIdentity.Scope
|
|||
public void initialize ()
|
||||
throws Exception
|
||||
{
|
||||
if(!_initialized){
|
||||
if(!_initialized)
|
||||
{
|
||||
super.initialize();
|
||||
if (_extInstance || _initOnStartup)
|
||||
{
|
||||
|
|
|
@ -0,0 +1,103 @@
|
|||
//
|
||||
// ========================================================================
|
||||
// Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd.
|
||||
// ------------------------------------------------------------------------
|
||||
// All rights reserved. This program and the accompanying materials
|
||||
// are made available under the terms of the Eclipse Public License v1.0
|
||||
// and Apache License v2.0 which accompanies this distribution.
|
||||
//
|
||||
// The Eclipse Public License is available at
|
||||
// http://www.eclipse.org/legal/epl-v10.html
|
||||
//
|
||||
// The Apache License v2.0 is available at
|
||||
// http://www.opensource.org/licenses/apache2.0.php
|
||||
//
|
||||
// You may elect to redistribute this code under either of these licenses.
|
||||
// ========================================================================
|
||||
//
|
||||
|
||||
|
||||
package org.eclipse.jetty.servlet;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import javax.servlet.Filter;
|
||||
import javax.servlet.FilterChain;
|
||||
import javax.servlet.FilterConfig;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.ServletRequest;
|
||||
import javax.servlet.ServletResponse;
|
||||
|
||||
import org.eclipse.jetty.util.log.StacklessLogging;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* FilterHolderTest
|
||||
*
|
||||
*
|
||||
*/
|
||||
public class FilterHolderTest
|
||||
{
|
||||
|
||||
@Test
|
||||
public void testInitialize()
|
||||
throws Exception
|
||||
{
|
||||
ServletHandler handler = new ServletHandler();
|
||||
|
||||
final AtomicInteger counter = new AtomicInteger(0);
|
||||
Filter filter = new Filter ()
|
||||
{
|
||||
@Override
|
||||
public void init(FilterConfig filterConfig) throws ServletException
|
||||
{
|
||||
counter.incrementAndGet();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy()
|
||||
{
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
FilterHolder fh = new FilterHolder();
|
||||
fh.setServletHandler(handler);
|
||||
|
||||
fh.setName("xx");
|
||||
fh.setFilter(filter);
|
||||
|
||||
try (StacklessLogging stackless = new StacklessLogging(FilterHolder.class))
|
||||
{
|
||||
fh.initialize();
|
||||
fail("Not started");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
//expected
|
||||
}
|
||||
|
||||
fh.start();
|
||||
fh.initialize();
|
||||
assertEquals(1, counter.get());
|
||||
|
||||
fh.initialize();
|
||||
assertEquals(1, counter.get());
|
||||
|
||||
fh.stop();
|
||||
assertEquals(1, counter.get());
|
||||
fh.start();
|
||||
assertEquals(1, counter.get());
|
||||
fh.initialize();
|
||||
assertEquals(2, counter.get());
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue