@SuppressWarnings({"UnusedDeclaration"})
    public void afterCompletion(ServletRequest request, ServletResponse response, Exception exception) throws Exception {
    }
Called in all cases in a {@code finally} block even if {@link #preHandle preHandle} returns
{@code false} or if an exception is thrown during filter chain processing.  Can be used for resource
cleanup if so desired.
<p/>
The default implementation does nothing (no-op) and exists as a template method for subclasses.

@param request   the incoming ServletRequest
@param response  the outgoing ServletResponse
@param exception any exception thrown during {@link #preHandle preHandle}, {@link #executeChain executeChain},
                 or {@link #postHandle postHandle} execution, or {@code null} if no exception was thrown
                 (i.e. the chain processed successfully).
@throws Exception if an error occurs.
web/src/main/java/org/apache/shiro/web/servlet/AdviceFilter.java