@SuppressWarnings({"unchecked"})
    private Key<? extends PathMatchingFilter> castToPathMatching(Key<? extends Filter> key) {
        return (Key<? extends PathMatchingFilter>) key;
    }
We use a LinkedHashMap here to ensure that iterator order is the same as add order.  This is important, as the
FilterChainResolver uses iterator order when searching for a matching chain.
support/guice/src/main/java/org/apache/shiro/guice/web/ShiroWebModule.java