From: markt Date: Wed, 28 Oct 2009 12:27:42 +0000 (+0000) Subject: Add FilterMaps to the web.xml file merge process X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=39635212665a3d5b366c5ff32726f57507554f02;p=tomcat7.0 Add FilterMaps to the web.xml file merge process git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@830514 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/org/apache/catalina/deploy/FilterMap.java b/java/org/apache/catalina/deploy/FilterMap.java index 0fc750b32..1c53d4612 100644 --- a/java/org/apache/catalina/deploy/FilterMap.java +++ b/java/org/apache/catalina/deploy/FilterMap.java @@ -37,7 +37,8 @@ import javax.servlet.DispatcherType; public class FilterMap implements Serializable { - + private static final long serialVersionUID = 1L; + // ------------------------------------------------------------- Properties @@ -99,6 +100,15 @@ public class FilterMap implements Serializable { } } + public void addServletNames(String[] servletNames) { + if (servletNames != null) { + for (int i = 0; i < servletNames.length; i++) { + addServletName(servletNames[i]); + } + } + } + + /** * The flag that indicates this mapping will match all url-patterns @@ -140,6 +150,14 @@ public class FilterMap implements Serializable { } } + public void addUrlPatterns(String[] urlPatterns) { + if (urlPatterns != null) { + for (int i = 0; i < urlPatterns.length; i++) { + addURLPattern(urlPatterns[i]); + } + } + } + /** * * This method will be used to set the current state of the FilterMap @@ -217,11 +235,15 @@ public class FilterMap implements Serializable { public int getDispatcherMapping() { // per the SRV.6.2.5 absence of any dispatcher elements is - // equivelant to a REQUEST value + // equivalent to a REQUEST value if (dispatcherMapping == NOT_SET) return REQUEST; else return dispatcherMapping; } + public void addDispatcherMapping(int dispatcherMapping) { + // Merge the supplied mapping with the current mapping + this.dispatcherMapping = getDispatcherMapping() | dispatcherMapping; + } // --------------------------------------------------------- Public Methods diff --git a/java/org/apache/catalina/startup/WebXml.java b/java/org/apache/catalina/startup/WebXml.java index 4c5c14953..63ca166e4 100644 --- a/java/org/apache/catalina/startup/WebXml.java +++ b/java/org/apache/catalina/startup/WebXml.java @@ -21,6 +21,7 @@ package org.apache.catalina.startup; import java.net.URL; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; @@ -170,7 +171,8 @@ public class WebXml { // TODO: Should support multiple display-name elements with language // TODO: Should support multiple icon elements // TODO: Description for init-param is ignored - private Map filters = new HashMap(); + private Map filters = + new LinkedHashMap(); public void addFilter(FilterDef filter) { if (filters.containsKey(filter.getFilterName())) { // Filter names must be unique within a web(-fragment).xml @@ -182,11 +184,11 @@ public class WebXml { public Map getFilters() { return filters; } // filter-mapping - private Set filterMaps = new HashSet(); + private Map filterMaps = new HashMap(); public void addFilterMapping(FilterMap filterMap) { - filterMaps.add(filterMap); + filterMaps.put(filterMap.getFilterName(),filterMap); } - public Set getFilterMappings() { return filterMaps; } + public Map getFilterMappings() { return filterMaps; } // listener // TODO: description (multiple with language) is ignored @@ -468,7 +470,7 @@ public class WebXml { for (FilterDef filter : filters.values()) { context.addFilterDef(filter); } - for (FilterMap filterMap : filterMaps) { + for (FilterMap filterMap : filterMaps.values()) { context.addFilterMap(filterMap); } // jsp-property-group needs to be after servlet configuration @@ -771,6 +773,25 @@ public class WebXml { } errorPages.putAll(temp.getErrorPages()); + for (WebXml fragment : fragments) { + for (String filterName : fragment.getFilterMappings().keySet()) { + FilterMap filterMap = + fragment.getFilterMappings().get(filterName); + // Always additive + if (filterMaps.containsKey(filterName)) { + FilterMap appFilterMap = filterMaps.get(filterName); + + appFilterMap.addDispatcherMapping( + filterMap.getDispatcherMapping()); + appFilterMap.addServletNames(filterMap.getServletNames()); + appFilterMap.addUrlPatterns(filterMap.getURLPatterns()); + } else { + addFilterMapping(filterMap); + } + } + } + + // TODO SERVLET3 - Merge remaining elements for (WebXml fragment : fragments) {