SecureContext sc = null;
if (extracted instanceof Authentication) { if (logger.isDebugEnabled()) { logger.debug( "Authentication added to ContextHolder from container"); }
    public void doFilter(ServletRequest request, ServletResponse response,        FilterChain chain) throws IOException, ServletException {        // Populate authentication information        Object extracted = this.extractFromContainer(request);        if (extracted instanceof Authentication) {            if (logger.isDebugEnabled()) {                logger.debug(                    "Authentication added to ContextHolder from container");            }            Authentication auth = (Authentication) extracted;            // Get or create existing SecureContext            SecureContext sc = null;            if ((ContextHolder.getContext() == null)                || !(ContextHolder.getContext() instanceof SecureContext)) {                try {                    sc = (SecureContext) this.secureContext.newInstance();                } catch (InstantiationException ie) {                    throw new ServletException(ie);                } catch (IllegalAccessException iae) {                    throw new ServletException(iae);                }            } else {                sc = (SecureContext) ContextHolder.getContext();            }            // Add Authentication to SecureContext, and save            sc.setAuthentication(auth);            ContextHolder.setContext((Context) sc);        } else {            if (logger.isDebugEnabled()) {                logger.debug(                    "Authentication not added to ContextHolder (could not extract an authentication object from the container which is an instance of Authentication)");            }        }        // Proceed with chain        chain.doFilter(request, response);        // Remove authentication information        if ((ContextHolder.getContext() != null)            && ContextHolder.getContext() instanceof SecureContext) {            if (logger.isDebugEnabled()) {                logger.debug(                    "Updating container with new Authentication object, and then removing Authentication from ContextHolder");            }            // Get context holder            SecureContext secureContext = (SecureContext) ContextHolder                .getContext();            // Update container with new Authentication object (may have been updated during method invocation)            this.commitToContainer(request, secureContext.getAuthentication());            // Remove authentication information from ContextHolder            secureContext.setAuthentication(null);            ContextHolder.setContext((Context) secureContext);        } else {            if (logger.isDebugEnabled()) {                logger.debug(                    "ContextHolder does not contain any authentication information");            }        }    }