You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2023/01/11 18:41:51 UTC

[tomcat] 01/03: Remove SecurityManagaer support from the EL API

This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit eab97408969d44a7b38192fe0af461955c8888de
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Wed Jan 11 18:29:04 2023 +0000

    Remove SecurityManagaer support from the EL API
---
 java/jakarta/el/BeanELResolver.java    | 11 +--------
 java/jakarta/el/ELProcessor.java       |  2 +-
 java/jakarta/el/ExpressionFactory.java | 37 ++++++----------------------
 java/jakarta/el/ImportHandler.java     |  2 +-
 java/jakarta/el/Util.java              | 45 +---------------------------------
 5 files changed, 11 insertions(+), 86 deletions(-)

diff --git a/java/jakarta/el/BeanELResolver.java b/java/jakarta/el/BeanELResolver.java
index c470b92734..9b99ef50db 100644
--- a/java/jakarta/el/BeanELResolver.java
+++ b/java/jakarta/el/BeanELResolver.java
@@ -22,8 +22,6 @@ import java.beans.Introspector;
 import java.beans.PropertyDescriptor;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Objects;
@@ -39,14 +37,7 @@ public class BeanELResolver extends ELResolver {
     private static final String CACHE_SIZE_PROP = "org.apache.el.BeanELResolver.CACHE_SIZE";
 
     static {
-        String cacheSizeStr;
-        if (System.getSecurityManager() == null) {
-            cacheSizeStr = System.getProperty(CACHE_SIZE_PROP, "1000");
-        } else {
-            cacheSizeStr = AccessController.doPrivileged(
-                    (PrivilegedAction<String>) () -> System.getProperty(CACHE_SIZE_PROP, "1000"));
-        }
-        CACHE_SIZE = Integer.parseInt(cacheSizeStr);
+        CACHE_SIZE = Integer.parseInt(System.getProperty(CACHE_SIZE_PROP, "1000"));
     }
 
     private final boolean readOnly;
diff --git a/java/jakarta/el/ELProcessor.java b/java/jakarta/el/ELProcessor.java
index 736ca9ce09..df2fc0120c 100644
--- a/java/jakarta/el/ELProcessor.java
+++ b/java/jakarta/el/ELProcessor.java
@@ -96,7 +96,7 @@ public class ELProcessor {
         Class<?> clazz = context.getImportHandler().resolveClass(className);
 
         if (clazz == null) {
-            clazz = Class.forName(className, true, Util.getContextClassLoader());
+            clazz = Class.forName(className, true, Thread.currentThread().getContextClassLoader());
         }
 
         if (!Modifier.isPublic(clazz.getModifiers())) {
diff --git a/java/jakarta/el/ExpressionFactory.java b/java/jakarta/el/ExpressionFactory.java
index aeacc00b8c..2eca6205df 100644
--- a/java/jakarta/el/ExpressionFactory.java
+++ b/java/jakarta/el/ExpressionFactory.java
@@ -25,8 +25,6 @@ import java.lang.ref.WeakReference;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Properties;
@@ -42,27 +40,14 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
  */
 public abstract class ExpressionFactory {
 
-    private static final boolean IS_SECURITY_ENABLED = (System.getSecurityManager() != null);
-
     private static final String PROPERTY_NAME = "jakarta.el.ExpressionFactory";
 
-    private static final String PROPERTY_FILE;
+    private static final String PROPERTY_FILE =
+            System.getProperty("java.home") + File.separator + "lib" + File.separator + "el.properties";
 
     private static final CacheValue nullTcclFactory = new CacheValue();
     private static final Map<CacheKey, CacheValue> factoryCache = new ConcurrentHashMap<>();
 
-    static {
-        if (IS_SECURITY_ENABLED) {
-            PROPERTY_FILE = AccessController.doPrivileged(
-                    (PrivilegedAction<String>) () -> System.getProperty("java.home") + File.separator +
-                            "lib" + File.separator + "el.properties"
-            );
-        } else {
-            PROPERTY_FILE = System.getProperty("java.home") + File.separator + "lib" +
-                    File.separator + "el.properties";
-        }
-    }
-
     /**
      * Create a new {@link ExpressionFactory}. The class to use is determined by
      * the following search order:
@@ -89,7 +74,7 @@ public abstract class ExpressionFactory {
     public static ExpressionFactory newInstance(Properties properties) {
         ExpressionFactory result = null;
 
-        ClassLoader tccl = Util.getContextClassLoader();
+        ClassLoader tccl = Thread.currentThread().getContextClassLoader();
 
         CacheValue cacheValue;
         Class<?> clazz;
@@ -323,20 +308,12 @@ public abstract class ExpressionFactory {
         // First services API
         className = getClassNameServices(tccl);
         if (className == null) {
-            if (IS_SECURITY_ENABLED) {
-                className = AccessController.doPrivileged((PrivilegedAction<String>) ExpressionFactory::getClassNameJreDir);
-            } else {
-                // Second el.properties file
-                className = getClassNameJreDir();
-            }
+            // Second el.properties file
+            className = getClassNameJreDir();
         }
         if (className == null) {
-            if (IS_SECURITY_ENABLED) {
-                className = AccessController.doPrivileged((PrivilegedAction<String>) ExpressionFactory::getClassNameSysProp);
-            } else {
-                // Third system property
-                className = getClassNameSysProp();
-            }
+            // Third system property
+            className = getClassNameSysProp();
         }
         if (className == null) {
             // Fourth - default
diff --git a/java/jakarta/el/ImportHandler.java b/java/jakarta/el/ImportHandler.java
index 93f1052a26..75faffc689 100644
--- a/java/jakarta/el/ImportHandler.java
+++ b/java/jakarta/el/ImportHandler.java
@@ -447,7 +447,7 @@ public class ImportHandler {
 
     private Class<?> findClass(String name, boolean throwException) {
         Class<?> clazz;
-        ClassLoader cl = Util.getContextClassLoader();
+        ClassLoader cl = Thread.currentThread().getContextClassLoader();
         try {
             clazz = cl.loadClass(name);
         } catch (ClassNotFoundException e) {
diff --git a/java/jakarta/el/Util.java b/java/jakarta/el/Util.java
index ee5848cb2d..fb5efaf80d 100644
--- a/java/jakarta/el/Util.java
+++ b/java/jakarta/el/Util.java
@@ -22,8 +22,6 @@ import java.lang.reflect.Array;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -43,26 +41,6 @@ class Util {
     private static final Class<?>[] EMPTY_CLASS_ARRAY = new Class<?>[0];
     private static final Object[] EMPTY_OBJECT_ARRAY = new Object[0];
 
-    private static final boolean IS_SECURITY_ENABLED = (System.getSecurityManager() != null);
-
-    private static final boolean GET_CLASSLOADER_USE_PRIVILEGED;
-
-    static {
-        if (IS_SECURITY_ENABLED) {
-            // Defaults to using a privileged block
-            // When running on Tomcat this will be set to false in
-            // $CATALINA_BASE/conf/catalina.properties
-            String value = AccessController.doPrivileged(
-                    (PrivilegedAction<String>) () -> System.getProperty(
-                            "org.apache.el.GET_CLASSLOADER_USE_PRIVILEGED", "true"));
-            GET_CLASSLOADER_USE_PRIVILEGED = Boolean.parseBoolean(value);
-        } else {
-            // No security manager - no need to use a privileged block.
-            GET_CLASSLOADER_USE_PRIVILEGED = false;
-        }
-    }
-
-
     /**
      * Checks whether the supplied Throwable is one that needs to be
      * rethrown and swallows all others.
@@ -113,7 +91,7 @@ class Util {
      */
     static ExpressionFactory getExpressionFactory() {
 
-        ClassLoader tccl = getContextClassLoader();
+        ClassLoader tccl = Thread.currentThread().getContextClassLoader();
 
         CacheValue cacheValue = null;
         ExpressionFactory factory = null;
@@ -673,19 +651,6 @@ class Util {
     }
 
 
-    static ClassLoader getContextClassLoader() {
-        ClassLoader tccl;
-        if (IS_SECURITY_ENABLED && GET_CLASSLOADER_USE_PRIVILEGED) {
-            PrivilegedAction<ClassLoader> pa = new PrivilegedGetTccl();
-            tccl = AccessController.doPrivileged(pa);
-        } else {
-            tccl = Thread.currentThread().getContextClassLoader();
-        }
-
-        return tccl;
-    }
-
-
     private abstract static class Wrapper<T> {
 
         public static List<Wrapper<Method>> wrap(Method[] methods, String name) {
@@ -868,12 +833,4 @@ class Util {
             return result;
         }
     }
-
-
-    private static class PrivilegedGetTccl implements PrivilegedAction<ClassLoader> {
-        @Override
-        public ClassLoader run() {
-            return Thread.currentThread().getContextClassLoader();
-        }
-    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org