You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2014/01/15 14:36:29 UTC
svn commit: r1558379 - in /tomcat/tc7.0.x/trunk: ./
java/org/apache/catalina/ java/org/apache/catalina/core/
java/org/apache/catalina/startup/ test/org/apache/catalina/core/
test/org/apache/catalina/startup/ webapps/docs/ webapps/docs/config/
Author: markt
Date: Wed Jan 15 13:36:29 2014
New Revision: 1558379
URL: http://svn.apache.org/r1558379
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=55855
Provide a context level option to exclude container SCIs.
Modified:
tomcat/tc7.0.x/trunk/ (props changed)
tomcat/tc7.0.x/trunk/java/org/apache/catalina/Context.java
tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/StandardContext.java
tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java
tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/FailedContext.java
tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/WebappServiceLoader.java
tomcat/tc7.0.x/trunk/test/org/apache/catalina/core/TesterContext.java
tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestWebappServiceLoader.java
tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
tomcat/tc7.0.x/trunk/webapps/docs/config/context.xml
Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
Merged /tomcat/trunk:r1558355
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/Context.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/Context.java?rev=1558379&r1=1558378&r2=1558379&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/Context.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/Context.java Wed Jan 15 13:36:29 2014
@@ -752,9 +752,34 @@ public interface Context extends Contain
*/
public void setInstanceManager(InstanceManager instanceManager);
- // --------------------------------------------------------- Public Methods
+ /**
+ * Sets the regular expression that specifies which container provided SCIs
+ * should be filtered out and not used for this context. Matching uses
+ * {@link java.util.regex.Matcher#find()} so the regular expression only has
+ * to match a sub-string of the fully qualified class name of the container
+ * provided SCI for it to be filtered out.
+ *
+ * @param containerSciFilter The regular expression against which the fully
+ * qualified class name of each container provided
+ * SCI should be checked
+ */
+ public void setContainerSciFilter(String containerSciFilter);
+
+ /**
+ * Obtains the regular expression that specifies which container provided
+ * SCIs should be filtered out and not used for this context. Matching uses
+ * {@link java.util.regex.Matcher#find()} so the regular expression only has
+ * to match a sub-string of the fully qualified class name of the container
+ * provided SCI for it to be filtered out.
+ *
+ * @return The regular expression against which the fully qualified class
+ * name of each container provided SCI will be checked
+ */
+ public String getContainerSciFilter();
+ // --------------------------------------------------------- Public Methods
+
/**
* Add a new Listener class name to the set of Listeners
* configured for this application.
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/StandardContext.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/StandardContext.java?rev=1558379&r1=1558378&r2=1558379&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/StandardContext.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/StandardContext.java Wed Jan 15 13:36:29 2014
@@ -893,10 +893,24 @@ public class StandardContext extends Con
private Map<String, String> preDestroyMethods =
new HashMap<String, String>();
+ private String containerSciFilter;
+
// ----------------------------------------------------- Context Properties
@Override
+ public void setContainerSciFilter(String containerSciFilter) {
+ this.containerSciFilter = containerSciFilter;
+ }
+
+
+ @Override
+ public String getContainerSciFilter() {
+ return containerSciFilter;
+ }
+
+
+ @Override
public boolean getSendRedirectBody() {
return sendRedirectBody;
}
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java?rev=1558379&r1=1558378&r2=1558379&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java Wed Jan 15 13:36:29 2014
@@ -1539,7 +1539,8 @@ public class ContextConfig implements Li
List<ServletContainerInitializer> detectedScis;
try {
WebappServiceLoader<ServletContainerInitializer> loader =
- new WebappServiceLoader<ServletContainerInitializer>(servletContext);
+ new WebappServiceLoader<ServletContainerInitializer>(
+ servletContext, context.getContainerSciFilter());
detectedScis = loader.load(ServletContainerInitializer.class);
} catch (IOException e) {
log.error(sm.getString(
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/FailedContext.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/FailedContext.java?rev=1558379&r1=1558378&r2=1558379&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/FailedContext.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/FailedContext.java Wed Jan 15 13:36:29 2014
@@ -697,4 +697,10 @@ public class FailedContext extends Lifec
@Override
public void setInstanceManager(InstanceManager instanceManager) { /* NO-OP */ }
+
+ @Override
+ public void setContainerSciFilter(String containerSciFilter) { /* NO-OP */ }
+
+ @Override
+ public String getContainerSciFilter() { return null; }
}
\ No newline at end of file
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/WebappServiceLoader.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/WebappServiceLoader.java?rev=1558379&r1=1558378&r2=1558379&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/WebappServiceLoader.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/WebappServiceLoader.java Wed Jan 15 13:36:29 2014
@@ -26,8 +26,10 @@ import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
+import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
+import java.util.regex.Pattern;
import javax.servlet.ServletContext;
@@ -56,14 +58,20 @@ public class WebappServiceLoader<T> {
private static final Charset UTF8 = Charset.forName("UTF-8");
private final ServletContext context;
+ private final Pattern containerSciFilterPattern;
/**
* Construct a loader to load services from a ServletContext.
*
* @param context the context to use
*/
- public WebappServiceLoader(ServletContext context) {
+ public WebappServiceLoader(ServletContext context, String containerSciFilter) {
this.context = context;
+ if (containerSciFilter != null && containerSciFilter.length() > 0) {
+ containerSciFilterPattern = Pattern.compile(containerSciFilter);
+ } else {
+ containerSciFilterPattern = null;
+ }
}
/**
@@ -123,6 +131,16 @@ public class WebappServiceLoader<T> {
parseConfigFile(containerServicesFound, resources.nextElement());
}
+ // Filter the discovered container SCIs if required
+ if (containerSciFilterPattern != null) {
+ Iterator<String> iter = containerServicesFound.iterator();
+ while (iter.hasNext()) {
+ if (containerSciFilterPattern.matcher(iter.next()).find()) {
+ iter.remove();
+ }
+ }
+ }
+
// Add the application services after the container services to ensure
// that the container services are loaded first
containerServicesFound.addAll(applicationServicesFound);
Modified: tomcat/tc7.0.x/trunk/test/org/apache/catalina/core/TesterContext.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/core/TesterContext.java?rev=1558379&r1=1558378&r2=1558379&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/test/org/apache/catalina/core/TesterContext.java (original)
+++ tomcat/tc7.0.x/trunk/test/org/apache/catalina/core/TesterContext.java Wed Jan 15 13:36:29 2014
@@ -1213,4 +1213,10 @@ public class TesterContext implements Co
public void setInstanceManager(InstanceManager instanceManager) {
// NO-OP
}
+
+ @Override
+ public void setContainerSciFilter(String containerSciFilter) { /* NO-OP */ }
+
+ @Override
+ public String getContainerSciFilter() { return null; }
}
Modified: tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestWebappServiceLoader.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestWebappServiceLoader.java?rev=1558379&r1=1558378&r2=1558379&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestWebappServiceLoader.java (original)
+++ tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestWebappServiceLoader.java Wed Jan 15 13:36:29 2014
@@ -36,7 +36,8 @@ public class TestWebappServiceLoader ext
tomcat.start();
WebappServiceLoader<ServletContainerInitializer> loader =
- new WebappServiceLoader<ServletContainerInitializer>(ctxt.getServletContext());
+ new WebappServiceLoader<ServletContainerInitializer>(ctxt.getServletContext(), null);
+ @SuppressWarnings("unused")
Collection<ServletContainerInitializer> initializers = loader.load(ServletContainerInitializer.class);
}
}
Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1558379&r1=1558378&r2=1558379&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Wed Jan 15 13:36:29 2014
@@ -63,6 +63,10 @@
the container may not be found. (markt/jboynes)
</fix>
<fix>
+ <bug>55855</bug>: Provide a per Context option (containerSciFilter) to
+ exclude container SCIs. (markt)
+ </fix>
+ <fix>
<bug>55937</bug>: When deploying applications, treat a context path of
<code>/ROOT</code> as equivalent to <code>/</code>. (markt)
</fix>
Modified: tomcat/tc7.0.x/trunk/webapps/docs/config/context.xml
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/config/context.xml?rev=1558379&r1=1558378&r2=1558379&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/config/context.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/config/context.xml Wed Jan 15 13:36:29 2014
@@ -291,6 +291,15 @@
If not specified, the standard value (defined below) will be used.</p>
</attribute>
+ <attribute name="containerSciFilter" required="false">
+ <p>The regular expression that specifies which container provided SCIs
+ should be filtered out and not used for this context. Matching uses
+ <code>java.util.regex.Matcher.find()</code> so the regular expression
+ only has to match a sub-string of the fully qualified class name of the
+ container provided SCI for it to be filtered out. If not specified,
+ no filtering will be applied.</p>
+ </attribute>
+
<attribute name="cookies" required="false">
<p>Set to <code>true</code> if you want cookies to be used for
session identifier communication if supported by the client (this
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org