Configurations can add server/system classes
This commit is contained in:
parent
2972354db7
commit
722eb60ce5
|
@ -99,7 +99,9 @@ public class AnnotationConfiguration extends AbstractConfiguration
|
||||||
public AnnotationConfiguration()
|
public AnnotationConfiguration()
|
||||||
{
|
{
|
||||||
super(new String[]{WebXmlConfiguration.class.getName(),MetaInfConfiguration.class.getName(),FragmentConfiguration.class.getName(),PlusConfiguration.class.getName()},
|
super(new String[]{WebXmlConfiguration.class.getName(),MetaInfConfiguration.class.getName(),FragmentConfiguration.class.getName(),PlusConfiguration.class.getName()},
|
||||||
new String[]{JettyWebXmlConfiguration.class.getName()});
|
new String[]{JettyWebXmlConfiguration.class.getName()},
|
||||||
|
new String[]{"org.eclipse.jetty.util.annotation."},
|
||||||
|
new String[]{"-org.eclipse.jetty.util.annotation."});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -63,7 +63,9 @@ public class EnvConfiguration extends AbstractConfiguration
|
||||||
public EnvConfiguration()
|
public EnvConfiguration()
|
||||||
{
|
{
|
||||||
super(new String[]{WebXmlConfiguration.class.getName(),MetaInfConfiguration.class.getName(),FragmentConfiguration.class.getName()},
|
super(new String[]{WebXmlConfiguration.class.getName(),MetaInfConfiguration.class.getName(),FragmentConfiguration.class.getName()},
|
||||||
new String[]{PlusConfiguration.class.getName(),JettyWebXmlConfiguration.class.getName()});
|
new String[]{PlusConfiguration.class.getName(),JettyWebXmlConfiguration.class.getName()},
|
||||||
|
new String[]{"org.eclipse.jetty.jndi."},
|
||||||
|
new String[]{"-org.eclipse.jetty.jndi."});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setJettyEnvXml (URL url)
|
public void setJettyEnvXml (URL url)
|
||||||
|
|
|
@ -30,6 +30,7 @@ import java.net.URL;
|
||||||
import javax.naming.Context;
|
import javax.naming.Context;
|
||||||
import javax.naming.InitialContext;
|
import javax.naming.InitialContext;
|
||||||
|
|
||||||
|
import org.eclipse.jetty.webapp.Configuration;
|
||||||
import org.eclipse.jetty.webapp.Descriptor;
|
import org.eclipse.jetty.webapp.Descriptor;
|
||||||
import org.eclipse.jetty.webapp.FragmentDescriptor;
|
import org.eclipse.jetty.webapp.FragmentDescriptor;
|
||||||
import org.eclipse.jetty.webapp.Origin;
|
import org.eclipse.jetty.webapp.Origin;
|
||||||
|
@ -56,6 +57,8 @@ public class PlusDescriptorProcessorTest
|
||||||
public void setUp() throws Exception
|
public void setUp() throws Exception
|
||||||
{
|
{
|
||||||
context = new WebAppContext();
|
context = new WebAppContext();
|
||||||
|
context.setConfigurations(new Configuration[]{new PlusConfiguration(),new EnvConfiguration()});
|
||||||
|
context.preConfigure();
|
||||||
context.setClassLoader(new WebAppClassLoader(Thread.currentThread().getContextClassLoader(), context));
|
context.setClassLoader(new WebAppClassLoader(Thread.currentThread().getContextClassLoader(), context));
|
||||||
ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
|
ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
|
||||||
Thread.currentThread().setContextClassLoader(context.getClassLoader());
|
Thread.currentThread().setContextClassLoader(context.getClassLoader());
|
||||||
|
|
|
@ -28,6 +28,7 @@ import org.eclipse.jetty.plus.jndi.EnvEntry;
|
||||||
import org.eclipse.jetty.plus.jndi.NamingEntry;
|
import org.eclipse.jetty.plus.jndi.NamingEntry;
|
||||||
import org.eclipse.jetty.plus.jndi.NamingEntryUtil;
|
import org.eclipse.jetty.plus.jndi.NamingEntryUtil;
|
||||||
import org.eclipse.jetty.server.Server;
|
import org.eclipse.jetty.server.Server;
|
||||||
|
import org.eclipse.jetty.webapp.Configuration;
|
||||||
import org.eclipse.jetty.webapp.MetaData;
|
import org.eclipse.jetty.webapp.MetaData;
|
||||||
import org.eclipse.jetty.webapp.WebAppClassLoader;
|
import org.eclipse.jetty.webapp.WebAppClassLoader;
|
||||||
import org.eclipse.jetty.webapp.WebAppContext;
|
import org.eclipse.jetty.webapp.WebAppContext;
|
||||||
|
@ -49,6 +50,8 @@ public class TestConfiguration
|
||||||
WebAppContext wac = new WebAppContext();
|
WebAppContext wac = new WebAppContext();
|
||||||
wac.setServer(server);
|
wac.setServer(server);
|
||||||
wac.setClassLoader(new WebAppClassLoader(Thread.currentThread().getContextClassLoader(), wac));
|
wac.setClassLoader(new WebAppClassLoader(Thread.currentThread().getContextClassLoader(), wac));
|
||||||
|
wac.addSystemClass("org.eclipse.jetty.jndi.");
|
||||||
|
wac.prependServerClass("-org.eclipse.jetty.jndi.");
|
||||||
|
|
||||||
MetaData metaData = new MetaData();
|
MetaData metaData = new MetaData();
|
||||||
|
|
||||||
|
|
|
@ -27,25 +27,31 @@ public class AbstractConfiguration implements Configuration
|
||||||
{
|
{
|
||||||
private final List<String> _after;
|
private final List<String> _after;
|
||||||
private final List<String> _before;
|
private final List<String> _before;
|
||||||
|
private final List<String> _system;
|
||||||
|
private final List<String> _server;
|
||||||
|
|
||||||
protected AbstractConfiguration()
|
protected AbstractConfiguration()
|
||||||
{
|
{
|
||||||
_after=Collections.emptyList();
|
_after=Collections.emptyList();
|
||||||
_before=Collections.emptyList();
|
_before=Collections.emptyList();
|
||||||
|
_system=Collections.emptyList();
|
||||||
|
_server=Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected AbstractConfiguration(String[] before,String[] after)
|
protected AbstractConfiguration(String[] before,String[] after)
|
||||||
{
|
{
|
||||||
_after=Collections.unmodifiableList(after==null?Collections.emptyList():Arrays.asList(after));
|
this(before,after,null,null);
|
||||||
_before=Collections.unmodifiableList(before==null?Collections.emptyList():Arrays.asList(before));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected AbstractConfiguration(List<String> after,List<String> before)
|
protected AbstractConfiguration(String[] before,String[] after,String[] systemClasses,String[] serverClasses)
|
||||||
{
|
{
|
||||||
_after=Collections.unmodifiableList(after==null?Collections.emptyList():new ArrayList<>(after));
|
_after=Collections.unmodifiableList(after==null?Collections.emptyList():Arrays.asList(after));
|
||||||
_before=Collections.unmodifiableList(before==null?Collections.emptyList():new ArrayList<>(before));
|
_before=Collections.unmodifiableList(before==null?Collections.emptyList():Arrays.asList(before));
|
||||||
|
_system=Collections.unmodifiableList(systemClasses==null?Collections.emptyList():Arrays.asList(systemClasses));
|
||||||
|
_server=Collections.unmodifiableList(serverClasses==null?Collections.emptyList():Arrays.asList(serverClasses));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName()
|
public String getName()
|
||||||
{
|
{
|
||||||
|
@ -64,6 +70,18 @@ public class AbstractConfiguration implements Configuration
|
||||||
return _before;
|
return _before;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getSystemClasses()
|
||||||
|
{
|
||||||
|
return _system;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getServerClasses()
|
||||||
|
{
|
||||||
|
return _server;
|
||||||
|
}
|
||||||
|
|
||||||
public void preConfigure(WebAppContext context) throws Exception
|
public void preConfigure(WebAppContext context) throws Exception
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,6 +60,20 @@ public interface Configuration
|
||||||
* after this configuration.
|
* after this configuration.
|
||||||
*/
|
*/
|
||||||
public default List<String> getAfterThis(){ return Collections.emptyList(); }
|
public default List<String> getAfterThis(){ return Collections.emptyList(); }
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------------------------- */
|
||||||
|
/** Get the system classes associated with this Configuration.
|
||||||
|
* @return A list of class/package names. Exclusions are prepended to the system classes and
|
||||||
|
* inclusions are appended.
|
||||||
|
*/
|
||||||
|
public default List<String> getSystemClasses() { return Collections.emptyList(); }
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------------------------- */
|
||||||
|
/** Get the system classes associated with this Configuration.
|
||||||
|
* @return A list of class/package names. Exclusions are prepended to the system classes and
|
||||||
|
* inclusions are appended.
|
||||||
|
*/
|
||||||
|
public default List<String> getServerClasses() { return Collections.emptyList(); }
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------------- */
|
/* ------------------------------------------------------------------------------- */
|
||||||
/** Set up for configuration.
|
/** Set up for configuration.
|
||||||
|
|
|
@ -35,7 +35,6 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import javax.management.RuntimeErrorException;
|
|
||||||
import javax.servlet.ServletContext;
|
import javax.servlet.ServletContext;
|
||||||
import javax.servlet.ServletRegistration.Dynamic;
|
import javax.servlet.ServletRegistration.Dynamic;
|
||||||
import javax.servlet.ServletSecurityElement;
|
import javax.servlet.ServletSecurityElement;
|
||||||
|
@ -98,7 +97,8 @@ public class WebAppContext extends ServletContextHandler implements WebAppClassL
|
||||||
|
|
||||||
private String[] __dftProtectedTargets = {"/web-inf", "/meta-inf"};
|
private String[] __dftProtectedTargets = {"/web-inf", "/meta-inf"};
|
||||||
|
|
||||||
/* default configurations.
|
/*
|
||||||
|
* default configurations.
|
||||||
* Order is determined by Topological sort in preconfigure
|
* Order is determined by Topological sort in preconfigure
|
||||||
*/
|
*/
|
||||||
public static final String[] DEFAULT_CONFIGURATION_CLASSES =
|
public static final String[] DEFAULT_CONFIGURATION_CLASSES =
|
||||||
|
@ -122,9 +122,7 @@ public class WebAppContext extends ServletContextHandler implements WebAppClassL
|
||||||
"org.xml.", // needed by javax.xml
|
"org.xml.", // needed by javax.xml
|
||||||
"org.w3c.", // needed by javax.xml
|
"org.w3c.", // needed by javax.xml
|
||||||
"org.eclipse.jetty.jmx.", // webapp cannot change jmx classes
|
"org.eclipse.jetty.jmx.", // webapp cannot change jmx classes
|
||||||
"org.eclipse.jetty.util.annotation.", // webapp cannot change jmx annotations
|
|
||||||
"org.eclipse.jetty.continuation.", // webapp cannot change continuation classes
|
"org.eclipse.jetty.continuation.", // webapp cannot change continuation classes
|
||||||
"org.eclipse.jetty.jndi.", // webapp cannot change naming classes
|
|
||||||
"org.eclipse.jetty.jaas.", // webapp cannot change jaas classes
|
"org.eclipse.jetty.jaas.", // webapp cannot change jaas classes
|
||||||
"org.eclipse.jetty.websocket.", // webapp cannot change / replace websocket classes
|
"org.eclipse.jetty.websocket.", // webapp cannot change / replace websocket classes
|
||||||
"org.eclipse.jetty.util.log.", // webapp should use server log
|
"org.eclipse.jetty.util.log.", // webapp should use server log
|
||||||
|
@ -143,9 +141,7 @@ public class WebAppContext extends ServletContextHandler implements WebAppClassL
|
||||||
public final static String[] __dftServerClasses =
|
public final static String[] __dftServerClasses =
|
||||||
{
|
{
|
||||||
"-org.eclipse.jetty.jmx.", // don't hide jmx classes
|
"-org.eclipse.jetty.jmx.", // don't hide jmx classes
|
||||||
"-org.eclipse.jetty.util.annotation.", // don't hide jmx annotation
|
|
||||||
"-org.eclipse.jetty.continuation.", // don't hide continuation classes
|
"-org.eclipse.jetty.continuation.", // don't hide continuation classes
|
||||||
"-org.eclipse.jetty.jndi.", // don't hide naming classes
|
|
||||||
"-org.eclipse.jetty.jaas.", // don't hide jaas classes
|
"-org.eclipse.jetty.jaas.", // don't hide jaas classes
|
||||||
"-org.eclipse.jetty.servlets.", // don't hide jetty servlets
|
"-org.eclipse.jetty.servlets.", // don't hide jetty servlets
|
||||||
"-org.eclipse.jetty.servlet.DefaultServlet", // don't hide default servlet
|
"-org.eclipse.jetty.servlet.DefaultServlet", // don't hide default servlet
|
||||||
|
@ -455,7 +451,11 @@ public class WebAppContext extends ServletContextHandler implements WebAppClassL
|
||||||
Map<String,Configuration> map = new HashMap<>();
|
Map<String,Configuration> map = new HashMap<>();
|
||||||
TopologicalSort<Configuration> sort = new TopologicalSort<>();
|
TopologicalSort<Configuration> sort = new TopologicalSort<>();
|
||||||
for (Configuration c:_configurations)
|
for (Configuration c:_configurations)
|
||||||
map.put(c.getName(),c);
|
{
|
||||||
|
Configuration duplicate = map.put(c.getName(),c);
|
||||||
|
if (duplicate!=null)
|
||||||
|
LOG.warn("Duplicate configuration in {} for {} and {}",this,duplicate,c);
|
||||||
|
}
|
||||||
for (Configuration c:_configurations)
|
for (Configuration c:_configurations)
|
||||||
{
|
{
|
||||||
for (String b:c.getBeforeThis())
|
for (String b:c.getBeforeThis())
|
||||||
|
@ -481,6 +481,26 @@ public class WebAppContext extends ServletContextHandler implements WebAppClassL
|
||||||
// Setup server classes
|
// Setup server classes
|
||||||
loadServerClasses();
|
loadServerClasses();
|
||||||
|
|
||||||
|
// Setup Configuration classes
|
||||||
|
for (Configuration configuration:_configurations)
|
||||||
|
{
|
||||||
|
configuration.getSystemClasses().forEach(c->
|
||||||
|
{
|
||||||
|
if (c.startsWith("-"))
|
||||||
|
prependSystemClass(c);
|
||||||
|
else
|
||||||
|
addSystemClass(c);
|
||||||
|
});
|
||||||
|
configuration.getServerClasses().forEach(c->
|
||||||
|
{
|
||||||
|
if (c.startsWith("-"))
|
||||||
|
prependServerClass(c);
|
||||||
|
else
|
||||||
|
addServerClass(c);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Configure classloader
|
// Configure classloader
|
||||||
_ownClassLoader=false;
|
_ownClassLoader=false;
|
||||||
if (getClassLoader()==null)
|
if (getClassLoader()==null)
|
||||||
|
@ -1029,7 +1049,6 @@ public class WebAppContext extends ServletContextHandler implements WebAppClassL
|
||||||
_configurations.addAll(Arrays.asList(configurations));
|
_configurations.addAll(Arrays.asList(configurations));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
public void addConfiguration(Configuration... configuration)
|
public void addConfiguration(Configuration... configuration)
|
||||||
{
|
{
|
||||||
|
@ -1039,7 +1058,6 @@ public class WebAppContext extends ServletContextHandler implements WebAppClassL
|
||||||
for (Configuration c:configuration)
|
for (Configuration c:configuration)
|
||||||
_configurations.add(c);
|
_configurations.add(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -65,13 +65,6 @@ public class WebInfConfiguration extends AbstractConfiguration
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
public WebInfConfiguration(List<String> after, List<String> before)
|
|
||||||
{
|
|
||||||
super(after,before);
|
|
||||||
// TODO Auto-generated constructor stub
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void preConfigure(final WebAppContext context) throws Exception
|
public void preConfigure(final WebAppContext context) throws Exception
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue