@Override protected FilterChainResolver createInstance() { List<Filter> priorityFilters = new ArrayList<>(); String priorityFilterClassNames = servletContext.getInitParameter(PRIORITY_FILTER_CLASSES_PARAMETER); if (Strings.hasText(priorityFilterClassNames)) { for (String className : Strings.commaDelimitedListToStringArray(priorityFilterClassNames)) { Filter filter = Classes.newInstance(className); priorityFilters.add(filter); } } else { priorityFilters.addAll(getDefaultFilters()); } // init each filter for (Filter filter : priorityFilters) { String filterName = Strings.uncapitalize(filter.getClass().getSimpleName()); try { filter.init(new DefaultFilterConfig(servletContext, filterName, Collections.<String, String>emptyMap())); } catch (ServletException e) { throw new ConfigurationException("Could not configure filter: ["+ filter.getClass().getName() +"]", e); } } return new ShiroPrioritizedFilterChainResolver(delegateFilterChainResolver, priorityFilters); }