@SuppressWarnings("deprecation")
    protected FilterChainResolver createFilterChainResolver() {

        FilterChainResolver resolver = null;

        Ini ini = getIni();

        if (!CollectionUtils.isEmpty(ini)) {
            @SuppressWarnings("unchecked")
            Factory<FilterChainResolver> factory = (Factory<FilterChainResolver>) this.objects.get(FILTER_CHAIN_RESOLVER_NAME);
            if (factory instanceof IniFactorySupport) {
                var iniFactory = (IniFactorySupport<?>) factory;
                iniFactory.setIni(ini);
                iniFactory.setDefaults(this.objects);
            }
            resolver = factory.getInstance();
        }

        return resolver;
    }
Creates an {@link Ini} instance reflecting the specified path, or {@code null} if the path does not exist and
is not required.
<p/>
If the path is required and does not exist or is empty, a {@link ConfigurationException} will be thrown.

@param configLocation the resource path to load into an {@code Ini} instance.
@param required       if the path must exist and be converted to a non-empty {@link Ini} instance.
@return an {@link Ini} instance reflecting the specified path, or {@code null} if the path does not exist and
is not required.
@throws ConfigurationException if the path is required but results in a null or empty Ini instance.
web/src/main/java/org/apache/shiro/web/env/IniWebEnvironment.java