/** * Creates a new {@link FilterClassLoader} that filter classes based on the {@link #defaultFilter()} on the * given parent ClassLoader * * @param parentClassLoader the ClassLoader to filter from. * @return a new intance of {@link FilterClassLoader}. */ public static FilterClassLoader create(ClassLoader parentClassLoader) { return new FilterClassLoader(parentClassLoader, defaultFilter()); }
/** * Creates a new {@link FilterClassLoader} that filter classes based on the {@link #defaultFilter()} on the * given parent ClassLoader * * @param parentClassLoader the ClassLoader to filter from. * @return a new intance of {@link FilterClassLoader}. */ public static FilterClassLoader create(ClassLoader parentClassLoader) { return new FilterClassLoader(parentClassLoader, defaultFilter()); }
@VisibleForTesting static ClassLoader createParent() { ClassLoader baseClassLoader = AuthorizerClassLoader.class.getClassLoader(); final Set<String> authorizerResources = traceSecurityDependencies(baseClassLoader); // by default, FilterClassLoader's defaultFilter allows all hadoop classes, which makes it so that // the authorizer extension can share the same instance of UserGroupInformation. This allows kerberos credential // renewal to also renew for any extension final FilterClassLoader.Filter defaultFilter = FilterClassLoader.defaultFilter(); return new FilterClassLoader(baseClassLoader, new FilterClassLoader.Filter() { @Override public boolean acceptResource(String resource) { return defaultFilter.acceptResource(resource) || authorizerResources.contains(resource); } @Override public boolean acceptPackage(String packageName) { return true; } }); }