This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch 8.5.x in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit 0610e67d41c77a961a064b6a50c9af67f9f253a3 Author: Mark Thomas <ma...@apache.org> AuthorDate: Thu May 20 13:19:01 2021 +0100 Align with 10.0.x/9.0.x - avoid explicitly referenced anonymous classes --- .../catalina/core/DefaultInstanceManager.java | 107 +++++++++++++-------- .../catalina/security/SecurityClassLoad.java | 4 +- 2 files changed, 72 insertions(+), 39 deletions(-) diff --git a/java/org/apache/catalina/core/DefaultInstanceManager.java b/java/org/apache/catalina/core/DefaultInstanceManager.java index 1ca25e3..7dc2ba1 100644 --- a/java/org/apache/catalina/core/DefaultInstanceManager.java +++ b/java/org/apache/catalina/core/DefaultInstanceManager.java @@ -506,13 +506,8 @@ public class DefaultInstanceManager implements InstanceManager { Class<?> clazz; if (SecurityUtil.isPackageProtectionEnabled()) { try { - clazz = AccessController.doPrivileged(new PrivilegedExceptionAction<Class<?>>() { - - @Override - public Class<?> run() throws Exception { - return loadClass(className, classLoader); - } - }); + clazz = AccessController.doPrivileged( + new PrivilegedLoadClass(className, classLoader)); } catch (PrivilegedActionException e) { Throwable t = e.getCause(); if (t instanceof ClassNotFoundException) { @@ -675,22 +670,7 @@ public class DefaultInstanceManager implements InstanceManager { final AnnotationCacheEntry entry) { Method result = null; if (Globals.IS_SECURITY_ENABLED) { - result = AccessController.doPrivileged( - new PrivilegedAction<Method>() { - @Override - public Method run() { - Method result = null; - try { - result = clazz.getDeclaredMethod( - entry.getAccessibleObjectName(), - entry.getParamTypes()); - } catch (NoSuchMethodException e) { - // Should never happen. On that basis don't log - // it. - } - return result; - } - }); + result = AccessController.doPrivileged(new PrivilegedGetMethod(clazz, entry)); } else { try { result = clazz.getDeclaredMethod( @@ -706,21 +686,7 @@ public class DefaultInstanceManager implements InstanceManager { final AnnotationCacheEntry entry) { Field result = null; if (Globals.IS_SECURITY_ENABLED) { - result = AccessController.doPrivileged( - new PrivilegedAction<Field>() { - @Override - public Field run() { - Field result = null; - try { - result = clazz.getDeclaredField( - entry.getAccessibleObjectName()); - } catch (NoSuchFieldException e) { - // Should never happen. On that basis don't log - // it. - } - return result; - } - }); + result = AccessController.doPrivileged(new PrivilegedGetField(clazz, entry)); } else { try { result = clazz.getDeclaredField(entry.getAccessibleObjectName()); @@ -799,7 +765,72 @@ public class DefaultInstanceManager implements InstanceManager { } } + private enum AnnotationCacheEntryType { FIELD, SETTER, POST_CONSTRUCT, PRE_DESTROY } + + + private static class PrivilegedGetField implements PrivilegedAction<Field> { + + private final Class<?> clazz; + private final AnnotationCacheEntry entry; + + public PrivilegedGetField(Class<?> clazz, AnnotationCacheEntry entry) { + this.clazz = clazz; + this.entry = entry; + } + + @Override + public Field run() { + Field result = null; + try { + result = clazz.getDeclaredField(entry.getAccessibleObjectName()); + } catch (NoSuchFieldException e) { + // Should never happen. On that basis don't log it. + } + return result; + } + } + + + private static class PrivilegedGetMethod implements PrivilegedAction<Method> { + + private final Class<?> clazz; + private final AnnotationCacheEntry entry; + + public PrivilegedGetMethod(Class<?> clazz, AnnotationCacheEntry entry) { + this.clazz = clazz; + this.entry = entry; + } + + @Override + public Method run() { + Method result = null; + try { + result = clazz.getDeclaredMethod( + entry.getAccessibleObjectName(), entry.getParamTypes()); + } catch (NoSuchMethodException e) { + // Should never happen. On that basis don't log it. + } + return result; + } + } + + + private class PrivilegedLoadClass implements PrivilegedExceptionAction<Class<?>> { + + private final String className; + private final ClassLoader classLoader; + + public PrivilegedLoadClass(String className, ClassLoader classLoader) { + this.className = className; + this.classLoader = classLoader; + } + + @Override + public Class<?> run() throws Exception { + return loadClass(className, classLoader); + } + } } diff --git a/java/org/apache/catalina/security/SecurityClassLoad.java b/java/org/apache/catalina/security/SecurityClassLoad.java index e19d7a2..2cc50bb 100644 --- a/java/org/apache/catalina/security/SecurityClassLoad.java +++ b/java/org/apache/catalina/security/SecurityClassLoad.java @@ -61,9 +61,11 @@ public final class SecurityClassLoad { loader.loadClass(basePackage + "AsyncContextImpl$DebugException"); loader.loadClass(basePackage + "AsyncListenerWrapper"); loader.loadClass(basePackage + "ContainerBase$PrivilegedAddChild"); - loadAnonymousInnerClasses(loader, basePackage + "DefaultInstanceManager"); loader.loadClass(basePackage + "DefaultInstanceManager$AnnotationCacheEntry"); loader.loadClass(basePackage + "DefaultInstanceManager$AnnotationCacheEntryType"); + loader.loadClass(basePackage + "DefaultInstanceManager$PrivilegedGetField"); + loader.loadClass(basePackage + "DefaultInstanceManager$PrivilegedGetMethod"); + loader.loadClass(basePackage + "DefaultInstanceManager$PrivilegedLoadClass"); loader.loadClass(basePackage + "ApplicationHttpRequest$AttributeNamesEnumerator"); } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org