From: markt Date: Fri, 12 Nov 2010 18:29:12 +0000 (+0000) Subject: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=50192 X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=b0b1cc7e8a9b645f9fe00c423d2c8c7c7e26c5ef;p=tomcat7.0 Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=50192 Improve performance for EL when running under a security manager. Based on a patch by Robert Goff. git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1034500 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/org/apache/jasper/el/ELContextImpl.java b/java/org/apache/jasper/el/ELContextImpl.java index ccc296e48..004770816 100644 --- a/java/org/apache/jasper/el/ELContextImpl.java +++ b/java/org/apache/jasper/el/ELContextImpl.java @@ -26,8 +26,6 @@ import javax.el.FunctionMapper; import javax.el.ValueExpression; import javax.el.VariableMapper; -import org.apache.jasper.Constants; - /** * Implementation of ELContext * @@ -66,22 +64,12 @@ public final class ELContextImpl extends ELContext { private final ELResolver resolver; - private FunctionMapper functionMapper; + private FunctionMapper functionMapper = NullFunctionMapper; private VariableMapper variableMapper; public ELContextImpl() { this(ELResolverImpl.getDefaultResolver()); - if (Constants.IS_SECURITY_ENABLED) { - functionMapper = new FunctionMapper() { - @Override - public Method resolveFunction(String prefix, String localName) { - return null; - } - }; - } else { - functionMapper = NullFunctionMapper; - } } public ELContextImpl(ELResolver resolver) { diff --git a/java/org/apache/jasper/el/ELResolverImpl.java b/java/org/apache/jasper/el/ELResolverImpl.java index ce408cf5d..129a2ab35 100644 --- a/java/org/apache/jasper/el/ELResolverImpl.java +++ b/java/org/apache/jasper/el/ELResolverImpl.java @@ -35,20 +35,27 @@ import javax.servlet.jsp.el.VariableResolver; import org.apache.jasper.Constants; public final class ELResolverImpl extends ELResolver { - private final static ELResolver DefaultResolver = new CompositeELResolver(); + private final static ELResolver DefaultResolver; static { - ((CompositeELResolver) DefaultResolver).add(new MapELResolver()); - ((CompositeELResolver) DefaultResolver).add(new ResourceBundleELResolver()); - ((CompositeELResolver) DefaultResolver).add(new ListELResolver()); - ((CompositeELResolver) DefaultResolver).add(new ArrayELResolver()); - ((CompositeELResolver) DefaultResolver).add(new BeanELResolver()); + if (Constants.IS_SECURITY_ENABLED) { + DefaultResolver = null; + } else { + DefaultResolver = new CompositeELResolver(); + ((CompositeELResolver) DefaultResolver).add(new MapELResolver()); + ((CompositeELResolver) DefaultResolver).add(new ResourceBundleELResolver()); + ((CompositeELResolver) DefaultResolver).add(new ListELResolver()); + ((CompositeELResolver) DefaultResolver).add(new ArrayELResolver()); + ((CompositeELResolver) DefaultResolver).add(new BeanELResolver()); + } } private final VariableResolver variableResolver; + private final ELResolver elResolver; public ELResolverImpl(VariableResolver variableResolver) { this.variableResolver = variableResolver; + this.elResolver = getDefaultResolver(); } @Override @@ -71,7 +78,7 @@ public final class ELResolverImpl extends ELResolver { } if (!context.isPropertyResolved()) { - return getDefaultResolver().getValue(context, base, property); + return elResolver.getValue(context, base, property); } return null; } @@ -97,7 +104,7 @@ public final class ELResolverImpl extends ELResolver { } if (!context.isPropertyResolved()) { - return getDefaultResolver().getType(context, base, property); + return elResolver.getType(context, base, property); } return null; } @@ -118,7 +125,7 @@ public final class ELResolverImpl extends ELResolver { } if (!context.isPropertyResolved()) { - getDefaultResolver().setValue(context, base, property, value); + elResolver.setValue(context, base, property, value); } } @@ -134,12 +141,12 @@ public final class ELResolverImpl extends ELResolver { return true; } - return getDefaultResolver().isReadOnly(context, base, property); + return elResolver.isReadOnly(context, base, property); } @Override public Iterator getFeatureDescriptors(ELContext context, Object base) { - return getDefaultResolver().getFeatureDescriptors(context, base); + return elResolver.getFeatureDescriptors(context, base); } @Override @@ -147,7 +154,7 @@ public final class ELResolverImpl extends ELResolver { if (base == null) { return String.class; } - return getDefaultResolver().getCommonPropertyType(context, base); + return elResolver.getCommonPropertyType(context, base); } public static ELResolver getDefaultResolver() { diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index 91785ecb2..cdd6f55da 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -175,6 +175,10 @@ Add logging and JMX support to JSP unloading. (rjung) + + 50192: Improve performance for EL when running under a + security manager. Based on a patch by Robert Goff. (markt) +