diff --git a/apps/showcase/src/main/resources/struts.xml b/apps/showcase/src/main/resources/struts.xml
index 150b8e36d..d59a198cd 100644
--- a/apps/showcase/src/main/resources/struts.xml
+++ b/apps/showcase/src/main/resources/struts.xml
@@ -35,6 +35,18 @@
+
+
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 c7d941eeb..c4ddfbd24 100644
--- a/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java
+++ b/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java
@@ -58,6 +58,18 @@ public class SecurityMemberAccess implements MemberAccess {
private static final Logger LOG = LogManager.getLogger(SecurityMemberAccess.class);
+ private static final Set ALLOWLIST_REQUIRED_PACKAGES = unmodifiableSet(new HashSet<>(Arrays.asList(
+ "org.apache.struts2.components",
+ "org.apache.struts2.views.jsp",
+ "com.opensymphony.xwork2.validator.validators"
+ )));
+
+ private static final Set> ALLOWLIST_REQUIRED_CLASSES = unmodifiableSet(new HashSet<>(Arrays.asList(
+ java.lang.Enum.class,
+ java.util.Date.class,
+ java.util.HashMap.class
+ )));
+
private final ProviderAllowlist providerAllowlist;
private final boolean allowStaticFieldAccess;
private Set excludeProperties = emptySet();
@@ -204,7 +216,9 @@ public class SecurityMemberAccess implements MemberAccess {
protected boolean isClassAllowlisted(Class> clazz) {
return allowlistClasses.contains(clazz)
+ || ALLOWLIST_REQUIRED_CLASSES.contains(clazz)
|| (providerAllowlist != null && providerAllowlist.getProviderAllowlist().contains(clazz))
+ || isClassBelongsToPackages(clazz, ALLOWLIST_REQUIRED_PACKAGES)
|| isClassBelongsToPackages(clazz, allowlistPackageNames);
}
diff --git a/core/src/main/resources/struts-excluded-classes.xml b/core/src/main/resources/struts-excluded-classes.xml
index 0d95f9c2c..f3f4f3f19 100644
--- a/core/src/main/resources/struts-excluded-classes.xml
+++ b/core/src/main/resources/struts-excluded-classes.xml
@@ -43,7 +43,8 @@
java.lang.System,
java.lang.Thread,
java.lang.ThreadGroup,
- java.lang.ThreadLocal"/>
+ java.lang.ThreadLocal
+ "/>
+ java.lang.ThreadLocal
+ "/>
@@ -98,7 +100,8 @@
org.wildfly.extension.undertow.deployment,
org.yaml.snakeyaml,
sun.misc,
- sun.reflect"/>
+ sun.reflect
+ "/>
+ sun.reflect
+ "/>