@Override public void deployConfig(WebApplicationContext wac, Filter... filters) { Assert.state(this.port != -1, "setup() was never called."); this.context = this.tomcatServer.addContext("", System.getProperty("java.io.tmpdir")); this.context.addApplicationListener(WsContextListener.class.getName()); Tomcat.addServlet(this.context, "dispatcherServlet", new DispatcherServlet(wac)).setAsyncSupported(true); this.context.addServletMappingDecoded("/", "dispatcherServlet"); for (Filter filter : filters) { FilterDef filterDef = new FilterDef(); filterDef.setFilterName(filter.getClass().getName()); filterDef.setFilter(filter); filterDef.setAsyncSupported("true"); this.context.addFilterDef(filterDef); FilterMap filterMap = new FilterMap(); filterMap.setFilterName(filter.getClass().getName()); filterMap.addURLPattern("/*"); filterMap.setDispatcher("REQUEST,FORWARD,INCLUDE,ASYNC"); this.context.addFilterMap(filterMap); } }
/** * Gets the filter mappings. * * @param fmap the fmap * @param dm the dm * @param filterClass the filter class * @return the filter mappings */ protected List<FilterMapping> getFilterMappings(FilterMap fmap, String dm, String filterClass) { String[] urls = fmap.getURLPatterns(); String[] servlets = fmap.getServletNames(); List<FilterMapping> results = new ArrayList<>(urls.length + servlets.length); addFilterMapping(fmap.getFilterName(), dm, filterClass, urls, results, FilterMapType.URL); addFilterMapping(fmap.getFilterName(), dm, filterClass, servlets, results, FilterMapType.SERVLET_NAME); return results; }
if (filterMap != null) { String dm; switch (filterMap.getDispatcherMapping()) { case FilterMap.ASYNC: dm = "ASYNC"; FilterDef fd = context.findFilterDef(filterMap.getFilterName()); if (fd != null) { filterClass = fd.getFilterClass();
FilterMap filterMap = new FilterMap(); filterMap.addURLPattern(urlPattern); servletNamesSet = servletNames.length > 0; for (String servletName : servletNames) { filterMap.addServletName(servletName); dispatchTypesSet = dispatcherTypes.length > 0; for (String dispatcherType : dispatcherTypes) { filterMap.setDispatcher(dispatcherType); fragment.addFilter(filterDef); if (urlPatternsSet || servletNamesSet) { filterMap.setFilterName(filterName); fragment.addFilterMapping(filterMap); FilterMap descMap = null; for (FilterMap map : fmap) { if (filterName.equals(map.getFilterName())) { descMap = map; break; String[] urlsPatterns = descMap.getURLPatterns(); if (urlPatternsSet && (urlsPatterns == null || urlsPatterns.length == 0)) { for (String urlPattern : filterMap.getURLPatterns()) { descMap.addURLPattern(urlPattern);
private void configureAdditionalHeaders(Context context) { FilterDef additionalHeadersFilter = new FilterDef(); additionalHeadersFilter.setFilterName(AdditionalHeadersFilter.class.getSimpleName()); additionalHeadersFilter.setFilterClass(AdditionalHeadersFilter.class.getName()); additionalHeadersFilter.setAsyncSupported("true"); additionalHeadersFilter.addInitParameter("additionalHeaders", additionalHeaders); context.addFilterDef(additionalHeadersFilter); FilterMap additionalHeadersFilterMap = new FilterMap(); additionalHeadersFilterMap.setFilterName(AdditionalHeadersFilter.class.getSimpleName()); additionalHeadersFilterMap.addURLPattern("/*"); context.addFilterMap(additionalHeadersFilterMap); }
/** * Validate the supplied FilterMap. */ private void validateFilterMap(FilterMap filterMap) { // Validate the proposed filter mapping String filterName = filterMap.getFilterName(); String[] servletNames = filterMap.getServletNames(); String[] urlPatterns = filterMap.getURLPatterns(); if (findFilterDef(filterName) == null) throw new IllegalArgumentException (sm.getString("standardContext.filterMap.name", filterName)); if (!filterMap.getMatchAllServletNames() && !filterMap.getMatchAllUrlPatterns() && (servletNames.length == 0) && (urlPatterns.length == 0)) throw new IllegalArgumentException (sm.getString("standardContext.filterMap.either")); // FIXME: Older spec revisions may still check this /* if ((servletNames.length != 0) && (urlPatterns.length != 0)) throw new IllegalArgumentException (sm.getString("standardContext.filterMap.either")); */ for (int i = 0; i < urlPatterns.length; i++) { if (!validateURLPattern(urlPatterns[i])) { throw new IllegalArgumentException (sm.getString("standardContext.filterMap.pattern", urlPatterns[i])); } } }
@Override public void addMappingForServletNames( EnumSet<DispatcherType> dispatcherTypes, boolean isMatchAfter, String... servletNames) { FilterMap filterMap = new FilterMap(); filterMap.setFilterName(filterDef.getFilterName()); if (dispatcherTypes != null) { for (DispatcherType dispatcherType : dispatcherTypes) { filterMap.setDispatcher(dispatcherType.name()); } } if (servletNames != null) { for (String servletName : servletNames) { filterMap.addServletName(servletName); } if (isMatchAfter) { context.addFilterMap(filterMap); } else { context.addFilterMapBefore(filterMap); } } // else error? }
@Override public void addFilter(FilterDescriptor descriptor) { String name = descriptor.getName(); Context context = getContextForPath(descriptor.getContext()); FilterDef filterDef = new FilterDef(); filterDef.setFilterName(name); filterDef.setDisplayName(descriptor.getDisplayName()); filterDef.setFilterClass(descriptor.getClazz().getName()); Map<String, String> initParams = descriptor.getInitParams(); if (initParams != null) { filterDef.getParameterMap().putAll(initParams); } context.addFilterDef(filterDef); for (FilterMappingDescriptor fmd : descriptor.getFilterMappings()) { FilterMap filterMap = new FilterMap(); filterMap.setFilterName(name); filterMap.addURLPatternDecoded(fmd.getUrlPattern()); for (String dispatch : fmd.getDispatchers()) { filterMap.setDispatcher(dispatch); } context.addFilterMap(filterMap); } }
ctx.addFilterDef(filterDef); FilterMap mapping = new FilterMap(); mapping.setFilterName(filterName); stream(filterDescriptor.urlPatterns()).forEach(mapping::addURLPattern); ctx.addFilterMap(mapping);
@Override public Collection<String> getServletNameMappings() { Collection<String> result = new HashSet<>(); FilterMap[] filterMaps = context.findFilterMaps(); for (FilterMap filterMap : filterMaps) { if (filterMap.getFilterName().equals(filterDef.getFilterName())) { for (String servletName : filterMap.getServletNames()) { result.add(servletName); } } } return result; }
@Override public Collection<String> getUrlPatternMappings() { Collection<String> result = new HashSet<>(); FilterMap[] filterMaps = context.findFilterMaps(); for (FilterMap filterMap : filterMaps) { if (filterMap.getFilterName().equals(filterDef.getFilterName())) { for (String urlPattern : filterMap.getURLPatterns()) { result.add(urlPattern); } } } return result; }
public void addFilterMapping(FilterMap filterMap) { filterMaps.add(filterMap); filterMappingNames.add(filterMap.getFilterName()); } public Set<FilterMap> getFilterMappings() { return filterMaps; }
/** * Return <code>true</code> if the context-relative request path * matches the requirements of the specified filter mapping; * otherwise, return <code>false</code>. * * @param filterMap Filter mapping being checked * @param requestPath Context-relative request path of this request */ private static boolean matchFiltersURL(FilterMap filterMap, String requestPath) { // Check the specific "*" special URL pattern, which also matches // named dispatches if (filterMap.getMatchAllUrlPatterns()) return true; if (requestPath == null) return false; // Match on context relative request path String[] testPaths = filterMap.getURLPatterns(); for (int i = 0; i < testPaths.length; i++) { if (matchFiltersURL(testPaths[i], requestPath)) { return true; } } // No match return false; }
/** * Return <code>true</code> if the specified servlet name matches * the requirements of the specified filter mapping; otherwise * return <code>false</code>. * * @param filterMap Filter mapping being checked * @param servletName Servlet name being checked */ private static boolean matchFiltersServlet(FilterMap filterMap, String servletName) { if (servletName == null) { return false; } // Check the specific "*" special servlet name else if (filterMap.getMatchAllServletNames()) { return true; } else { String[] servletNames = filterMap.getServletNames(); for (int i = 0; i < servletNames.length; i++) { if (servletName.equals(servletNames[i])) { return true; } } return false; } }
switch (type) { case FORWARD : if ((filterMap.getDispatcherMapping() & FilterMap.FORWARD) != 0) { return true; if ((filterMap.getDispatcherMapping() & FilterMap.INCLUDE) != 0) { return true; if ((filterMap.getDispatcherMapping() & FilterMap.REQUEST) != 0) { return true; if ((filterMap.getDispatcherMapping() & FilterMap.ERROR) != 0) { return true; if ((filterMap.getDispatcherMapping() & FilterMap.ASYNC) != 0) { return true;
FilterMap filterMap = new FilterMap(); urlPatternsSet = urlPatterns.length > 0; for (String urlPattern : urlPatterns) { filterMap.addURLPattern(urlPattern); servletNamesSet = servletNames.length > 0; for (String servletName : servletNames) { filterMap.addServletName(servletName); dispatchTypesSet = dispatcherTypes.length > 0; for (String dispatcherType : dispatcherTypes) { filterMap.setDispatcher(dispatcherType); fragment.addFilter(filterDef); if (urlPatternsSet || servletNamesSet) { filterMap.setFilterName(filterName); fragment.addFilterMapping(filterMap); FilterMap descMap = null; for (FilterMap map : fmap) { if (filterName.equals(map.getFilterName())) { descMap = map; break; String[] urlsPatterns = descMap.getURLPatterns(); if (urlPatternsSet && (urlsPatterns == null || urlsPatterns.length == 0)) { for (String urlPattern : filterMap.getURLPatterns()) {
private void configureResponseSecurityHeaders(Context context) { FilterDef httpHeaderFilter = new FilterDef(); httpHeaderFilter.setFilterName(HttpHeaderSecurityFilter.class.getSimpleName()); httpHeaderFilter.setFilterClass(HttpHeaderSecurityFilter.class.getName()); httpHeaderFilter.setAsyncSupported("true"); // X-Frame-Options httpHeaderFilter.addInitParameter("antiClickJackingEnabled", "true"); httpHeaderFilter.addInitParameter("antiClickJackingOption", antiClickJackingOption); if (!StringUtils.isEmpty(antiClickJackingUri)) httpHeaderFilter.addInitParameter("antiClickJackingUri", antiClickJackingUri); // X-XSS-Protection httpHeaderFilter.addInitParameter("xssProtectionEnabled", "true"); // X-Content-Type-Options httpHeaderFilter.addInitParameter("blockContentTypeSniffingEnabled", "true"); // HTTP Strict-Transport-Security httpHeaderFilter.addInitParameter("hstsEnabled", "true"); httpHeaderFilter.addInitParameter("hstsIncludeSubDomains", Boolean.toString(hstsIncludeSubdomains)); httpHeaderFilter.addInitParameter("hstsMaxAgeSeconds", Integer.toString(hstsMaxAgeSeconds)); context.addFilterDef(httpHeaderFilter); FilterMap httpHeaderFilterMap = new FilterMap(); httpHeaderFilterMap.setFilterName(HttpHeaderSecurityFilter.class.getSimpleName()); httpHeaderFilterMap.addURLPattern("/*"); context.addFilterMap(httpHeaderFilterMap); }
String filterName = filterMap.getFilterName(); String[] servletNames = filterMap.getServletNames(); String[] urlPatterns = filterMap.getURLPatterns(); if (findFilterDef(filterName) == null) throw new IllegalArgumentException (sm.getString("standardContext.filterMap.name", filterName)); if (!filterMap.getMatchAllServletNames() && !filterMap.getMatchAllUrlPatterns() && (servletNames.length == 0) && (urlPatterns.length == 0)) throw new IllegalArgumentException
@Override public void addMappingForServletNames( EnumSet<DispatcherType> dispatcherTypes, boolean isMatchAfter, String... servletNames) { FilterMap filterMap = new FilterMap(); filterMap.setFilterName(filterDef.getFilterName()); if (dispatcherTypes != null) { for (DispatcherType dispatcherType : dispatcherTypes) { filterMap.setDispatcher(dispatcherType.name()); } } if (servletNames != null) { for (String servletName : servletNames) { filterMap.addServletName(servletName); } if (isMatchAfter) { context.addFilterMap(filterMap); } else { context.addFilterMapBefore(filterMap); } } // else error? }
ctx.addFilterDef(filterDef); FilterMap mapping = new FilterMap(); mapping.setFilterName(filterName); stream(filterDescriptor.urlPatterns()).forEach(mapping::addURLPattern); ctx.addFilterMap(mapping);