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 3b870dedd..29d15ebf9 100644 --- a/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java +++ b/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java @@ -27,8 +27,10 @@ import java.lang.reflect.AccessibleObject; import java.lang.reflect.Field; import java.lang.reflect.Member; import java.lang.reflect.Modifier; +import java.util.Arrays; import java.util.Collections; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.regex.Matcher; @@ -241,9 +243,11 @@ public class SecurityMemberAccess implements MemberAccess { } protected boolean isExcludedPackageNames(Class clazz) { - String suffixedPackageName = toPackageName(clazz) + "."; - for (String excludedPackageName : excludedPackageNames) { - if (suffixedPackageName.startsWith(excludedPackageName)) { + String packageName = toPackageName(clazz); + List packageParts = Arrays.asList(packageName.split("\\.")); + for (int i = 0; i < packageParts.size(); i++) { + String parentPackage = String.join(".", packageParts.subList(0, i + 1)); + if (excludedPackageNames.contains(parentPackage)) { return true; } }