protected FilterChain getExecutionChain(ServletRequest request, ServletResponse response, FilterChain origChain) {

        FilterChain chain = origChain;

        FilterChainResolver resolver = getFilterChainResolver();
        if (resolver == null) {
            LOGGER.debug("No FilterChainResolver configured.  Returning original FilterChain.");
            return origChain;
        }

        FilterChain resolved = resolver.getChain(request, response, origChain);
        if (resolved != null) {
            LOGGER.trace("Resolved a configured FilterChain for the current request.");
            chain = resolved;
        } else {
            LOGGER.trace("No FilterChain configured for the current request.  Using the default.");
        }

        return chain;
    }
Returns the {@code FilterChain} to execute for the given request.
<p/>
The {@code origChain} argument is the
original {@code FilterChain} supplied by the Servlet Container, but it may be modified to provide
more behavior by pre-pending further chains according to the Shiro configuration.
<p/>
This implementation returns the chain that will actually be executed by acquiring the chain from a
{@link #getFilterChainResolver() filterChainResolver}.  The resolver determines exactly which chain to
execute, typically based on URL configuration.  If no chain is returned from the resolver call
(returns {@code null}), then the {@code origChain} will be returned by default.

@param request   the incoming ServletRequest
@param response  the outgoing ServletResponse
@param origChain the original {@code FilterChain} provided by the Servlet Container
@return the {@link FilterChain} to execute for the given request
@since 1.0
web/src/main/java/org/apache/shiro/web/servlet/AbstractShiroFilter.java