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