FileDocCategorySizeDatePackage
ApplicationFilterConfig.javaAPI DocApache Tomcat 6.0.1413610Fri Jul 20 04:20:34 BST 2007org.apache.catalina.core

ApplicationFilterConfig

public final class ApplicationFilterConfig extends Object implements Serializable, FilterConfig
Implementation of a javax.servlet.FilterConfig useful in managing the filter instances instantiated when a web application is first started.
author
Craig R. McClanahan
version
$Revision: 505593 $ $Date: 2007-02-10 01:54:56 +0100 (sam., 10 févr. 2007) $

Fields Summary
protected static org.apache.catalina.util.StringManager
sm
private org.apache.catalina.Context
context
The Context with which we are associated.
private transient Filter
filter
The application Filter we are configured for.
private org.apache.catalina.deploy.FilterDef
filterDef
The FilterDef that defines our associated Filter.
protected static Properties
restrictedFilters
Restricted filters (which can only be loaded by a privileged webapp).
Constructors Summary
public ApplicationFilterConfig(org.apache.catalina.Context context, org.apache.catalina.deploy.FilterDef filterDef)
Construct a new ApplicationFilterConfig for the specified filter definition.

param
context The context with which we are associated
param
filterDef Filter definition for which a FilterConfig is to be constructed
exception
ClassCastException if the specified class does not implement the javax.servlet.Filter interface
exception
ClassNotFoundException if the filter class cannot be found
exception
IllegalAccessException if the filter class cannot be publicly instantiated
exception
InstantiationException if an exception occurs while instantiating the filter object
exception
ServletException if thrown by the filter's init() method
throws
NamingException
throws
InvocationTargetException

    
    // ----------------------------------------------------------- Constructors


                                                                                                    
        
          
                
                  

        super();

        if (restrictedFilters == null) {
            restrictedFilters = new Properties();
            try {
                InputStream is = 
                    this.getClass().getClassLoader().getResourceAsStream
                        ("org/apache/catalina/core/RestrictedFilters.properties");
                if (is != null) {
                    restrictedFilters.load(is);
                } else {
                    context.getLogger().error(sm.getString("applicationFilterConfig.restrictedFiltersResources"));
                }
            } catch (IOException e) {
                context.getLogger().error(sm.getString("applicationFilterConfig.restrictedServletsResources"), e);
            }
        }
        
        this.context = context;
        setFilterDef(filterDef);

    
Methods Summary
javax.servlet.FiltergetFilter()
Return the application Filter we are configured for.

exception
ClassCastException if the specified class does not implement the javax.servlet.Filter interface
exception
ClassNotFoundException if the filter class cannot be found
exception
IllegalAccessException if the filter class cannot be publicly instantiated
exception
InstantiationException if an exception occurs while instantiating the filter object
exception
ServletException if thrown by the filter's init() method
throws
NamingException
throws
InvocationTargetException


        // Return the existing filter instance, if any
        if (this.filter != null)
            return (this.filter);

        // Identify the class loader we will be using
        String filterClass = filterDef.getFilterClass();
        ClassLoader classLoader = null;
        if (filterClass.startsWith("org.apache.catalina."))
            classLoader = this.getClass().getClassLoader();
        else
            classLoader = context.getLoader().getClassLoader();

        ClassLoader oldCtxClassLoader =
            Thread.currentThread().getContextClassLoader();

        // Instantiate a new instance of this filter and return it
        Class clazz = classLoader.loadClass(filterClass);
        if (!isFilterAllowed(clazz)) {
            throw new SecurityException
                (sm.getString("applicationFilterConfig.privilegedFilter",
                        filterClass));
        }
        this.filter = (Filter) clazz.newInstance();
        if (!context.getIgnoreAnnotations()) {
            if (context instanceof StandardContext) {
               AnnotationProcessor processor = ((StandardContext)context).getAnnotationProcessor();
               processor.processAnnotations(this.filter);
               processor.postConstruct(this.filter);
            }
        }
        if (context instanceof StandardContext &&
            ((StandardContext) context).getSwallowOutput()) {
            try {
                SystemLogHandler.startCapture();
                filter.init(this);
            } finally {
                String log = SystemLogHandler.stopCapture();
                if (log != null && log.length() > 0) {
                    getServletContext().log(log);
                }
            }
        } else {
            filter.init(this);
        }
        return (this.filter);


    
org.apache.catalina.deploy.FilterDefgetFilterDef()
Return the filter definition we are configured for.


        return (this.filterDef);

    
public java.lang.StringgetFilterName()
Return the name of the filter we are configuring.


    
    // --------------------------------------------------- FilterConfig Methods


                  
       

        return (filterDef.getFilterName());

    
public java.lang.StringgetInitParameter(java.lang.String name)
Return a String containing the value of the named initialization parameter, or null if the parameter does not exist.

param
name Name of the requested initialization parameter


        Map map = filterDef.getParameterMap();
        if (map == null)
            return (null);
        else
            return ((String) map.get(name));

    
public java.util.EnumerationgetInitParameterNames()
Return an Enumeration of the names of the initialization parameters for this Filter.


        Map map = filterDef.getParameterMap();
        if (map == null)
            return (new Enumerator(new ArrayList()));
        else
            return (new Enumerator(map.keySet()));

    
public javax.servlet.ServletContextgetServletContext()
Return the ServletContext of our associated web application.


        return (this.context.getServletContext());

    
protected booleanisFilterAllowed(java.lang.Class filterClass)
Return true if loading this filter is allowed.


        // Privileged webapps may load all servlets without restriction
        if (context.getPrivileged()) {
            return true;
        }

        Class clazz = filterClass;
        while (clazz != null && !clazz.getName().equals("javax.servlet.Filter")) {
            if ("restricted".equals(restrictedFilters.getProperty(clazz.getName()))) {
                return (false);
            }
            clazz = clazz.getSuperclass();
        }
        
        return (true);

    
voidrelease()
Release the Filter instance associated with this FilterConfig, if there is one.


        if (this.filter != null)
        {
            if (Globals.IS_SECURITY_ENABLED) {
                try {
                    SecurityUtil.doAsPrivilege("destroy", filter); 
                } catch(java.lang.Exception ex){                    
                    context.getLogger().error("ApplicationFilterConfig.doAsPrivilege", ex);
                }
                SecurityUtil.remove(filter);
            } else { 
                filter.destroy();
            }
            if (!context.getIgnoreAnnotations()) {
                try {
                    ((StandardContext)context).getAnnotationProcessor().preDestroy(this.filter);
                } catch (Exception e) {
                    context.getLogger().error("ApplicationFilterConfig.preDestroy", e);
                }
            }
        }
        this.filter = null;

     
voidsetFilterDef(org.apache.catalina.deploy.FilterDef filterDef)
Set the filter definition we are configured for. This has the side effect of instantiating an instance of the corresponding filter class.

param
filterDef The new filter definition
exception
ClassCastException if the specified class does not implement the javax.servlet.Filter interface
exception
ClassNotFoundException if the filter class cannot be found
exception
IllegalAccessException if the filter class cannot be publicly instantiated
exception
InstantiationException if an exception occurs while instantiating the filter object
exception
ServletException if thrown by the filter's init() method
throws
NamingException
throws
InvocationTargetException


        this.filterDef = filterDef;
        if (filterDef == null) {

            // Release any previously allocated filter instance
            if (this.filter != null){
                if( Globals.IS_SECURITY_ENABLED) {
                    try{
                        SecurityUtil.doAsPrivilege("destroy", filter);  
                    } catch(java.lang.Exception ex){    
                        context.getLogger().error("ApplicationFilterConfig.doAsPrivilege", ex);
                    }
                    SecurityUtil.remove(filter);
                } else { 
                    filter.destroy();
                }
                if (!context.getIgnoreAnnotations()) {
                    try {
                        ((StandardContext)context).getAnnotationProcessor().preDestroy(this.filter);
                    } catch (Exception e) {
                        context.getLogger().error("ApplicationFilterConfig.preDestroy", e);
                    }
                }
            }
            this.filter = null;

        } else {

            // Allocate a new filter instance
            Filter filter = getFilter();

        }

    
public java.lang.StringtoString()
Return a String representation of this object.


        StringBuffer sb = new StringBuffer("ApplicationFilterConfig[");
        sb.append("name=");
        sb.append(filterDef.getFilterName());
        sb.append(", filterClass=");
        sb.append(filterDef.getFilterClass());
        sb.append("]");
        return (sb.toString());