diff --git a/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlDocConfigurationProvider.java b/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlDocConfigurationProvider.java index d874f850f..4e206ea2d 100644 --- a/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlDocConfigurationProvider.java +++ b/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlDocConfigurationProvider.java @@ -108,6 +108,11 @@ public abstract class XmlDocConfigurationProvider implements ConfigurationProvid this.valueSubstitutor = valueSubstitutor; } + @Inject + public void setProviderAllowlist(ProviderAllowlist providerAllowlist) { + this.providerAllowlist = providerAllowlist; + } + public XmlDocConfigurationProvider(Document... documents) { this.documents = Arrays.asList(documents); } @@ -134,11 +139,6 @@ public abstract class XmlDocConfigurationProvider implements ConfigurationProvid this.configuration = configuration; } - private void registerAllowlist() { - providerAllowlist = configuration.getContainer().getInstance(ProviderAllowlist.class); - providerAllowlist.registerAllowlist(this, allowlistClasses); - } - @Override public void destroy() { if (providerAllowlist != null) { @@ -149,6 +149,7 @@ public abstract class XmlDocConfigurationProvider implements ConfigurationProvid protected Class allowAndLoadClass(String className) throws ClassNotFoundException { Class clazz = loadClass(className); allowlistClasses.addAll(ConfigurationUtil.getAllClassTypes(clazz)); + providerAllowlist.registerAllowlist(this, allowlistClasses); return clazz; } @@ -330,7 +331,6 @@ public abstract class XmlDocConfigurationProvider implements ConfigurationProvid } declaredPackages.clear(); - registerAllowlist(); configuration = null; } diff --git a/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlUtil.java b/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlUtil.java index 78cada96d..52475b8d5 100644 --- a/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlUtil.java +++ b/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlUtil.java @@ -859,11 +859,6 @@ public class OgnlUtil { return createDefaultContext(root, null); } - /** - * Note that the allowlist capability is not enforced by the {@link OgnlContext} returned by this method. Currently, - * this context is only leveraged by some public methods on {@link OgnlUtil} which are called by - * {@link OgnlReflectionProvider}. - */ protected Map createDefaultContext(Object root, ClassResolver resolver) { if (resolver == null) { resolver = container.getInstance(RootAccessor.class); @@ -871,11 +866,7 @@ public class OgnlUtil { throw new IllegalStateException("Cannot find ClassResolver"); } } - - SecurityMemberAccess memberAccess = container.getInstance(SecurityMemberAccess.class); - memberAccess.useEnforceAllowlistEnabled(Boolean.FALSE.toString()); - - return Ognl.createDefaultContext(root, memberAccess, resolver, defaultConverter); + return Ognl.createDefaultContext(root, container.getInstance(SecurityMemberAccess.class), resolver, defaultConverter); } @FunctionalInterface diff --git a/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java b/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java index 333fd276a..f15b50af1 100644 --- a/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java +++ b/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java @@ -90,6 +90,7 @@ public class SecurityMemberAccess implements MemberAccess { private Set excludedPackageNames = emptySet(); private Set excludedPackageExemptClasses = emptySet(); + private static volatile boolean isDevModeLogged = false; private volatile boolean isDevModeInit; private boolean isDevMode; private Set devModeExcludedClasses = unmodifiableSet(new HashSet<>(singletonList(Object.class.getName()))); @@ -536,7 +537,10 @@ public class SecurityMemberAccess implements MemberAccess { return; } isDevModeInit = true; - LOG.warn("Working in devMode, using devMode excluded classes and packages!"); + if (!isDevModeLogged) { + LOG.warn("Working in devMode, using devMode excluded classes and packages!"); + isDevModeLogged = true; + } excludedClasses = devModeExcludedClasses; excludedPackageNamePatterns = devModeExcludedPackageNamePatterns; excludedPackageNames = devModeExcludedPackageNames; diff --git a/pom.xml b/pom.xml index 854f75632..e53b0cbfb 100644 --- a/pom.xml +++ b/pom.xml @@ -114,7 +114,7 @@ 2.23.1 3.3.5 2.0.13 - 5.3.31 + 5.3.37 3.0.8 1.0.7 3.2.5