Fixes how dependencies are injected into constructor

This commit is contained in:
Lukasz Lenart
2018-06-27 08:15:21 +02:00
parent a75eddb515
commit bad9a49060
3 changed files with 28 additions and 32 deletions
@@ -70,26 +70,10 @@ public class OgnlUtil {
private boolean allowStaticMethodAccess;
private boolean disallowProxyMemberAccess;
public OgnlUtil(
@Inject(value = XWorkConstants.OGNL_EXCLUDED_CLASSES, required = false)
String commaDelimitedClasses,
@Inject(value = XWorkConstants.OGNL_EXCLUDED_PACKAGE_NAME_PATTERNS, required = false)
String commaDelimitedPackagePatterns,
@Inject(value = XWorkConstants.OGNL_EXCLUDED_PACKAGE_NAMES, required = false)
String commaDelimitedPackageNames
) {
excludedClasses = Collections.unmodifiableSet(parseExcludedClasses(commaDelimitedClasses));
excludedPackageNamePatterns = Collections.unmodifiableSet(parseExcludedPackageNamePatterns(commaDelimitedPackagePatterns));
excludedPackageNames = Collections.unmodifiableSet(parseExcludedPackageNames(commaDelimitedPackageNames));
}
/**
* Constructor used by internal DI
*/
public OgnlUtil() {
excludedClasses = Collections.emptySet();
excludedPackageNamePatterns = Collections.emptySet();
excludedPackageNames = Collections.emptySet();
excludedClasses = new HashSet<>();
excludedPackageNamePatterns = new HashSet<>();
excludedPackageNames = new HashSet<>();
}
@Inject
@@ -116,6 +100,13 @@ public class OgnlUtil {
}
}
@Inject(value = XWorkConstants.OGNL_EXCLUDED_CLASSES, required = false)
public void setExcludedClasses(String commaDelimitedClasses) {
Set<Class<?>> excludedClasses = this.excludedClasses;
excludedClasses.addAll(parseExcludedClasses(commaDelimitedClasses));
this.excludedClasses = Collections.unmodifiableSet(excludedClasses);
}
private Set<Class<?>> parseExcludedClasses(String commaDelimitedClasses) {
Set<String> classNames = TextParseUtil.commaDelimitedStringToSet(commaDelimitedClasses);
Set<Class<?>> classes = new HashSet<>();
@@ -131,6 +122,12 @@ public class OgnlUtil {
return classes;
}
@Inject(value = XWorkConstants.OGNL_EXCLUDED_PACKAGE_NAME_PATTERNS, required = false)
public void setExcludedPackageNamePatterns(String commaDelimitedPackagePatterns) {
Set<Pattern> excludedPackageNamePatterns = this.excludedPackageNamePatterns;
excludedPackageNamePatterns.addAll(parseExcludedPackageNamePatterns(commaDelimitedPackagePatterns));
this.excludedPackageNamePatterns = Collections.unmodifiableSet(excludedPackageNamePatterns);
}
private Set<Pattern> parseExcludedPackageNamePatterns(String commaDelimitedPackagePatterns) {
Set<String> packagePatterns = TextParseUtil.commaDelimitedStringToSet(commaDelimitedPackagePatterns);
@@ -143,6 +140,13 @@ public class OgnlUtil {
return packageNamePatterns;
}
@Inject(value = XWorkConstants.OGNL_EXCLUDED_PACKAGE_NAMES, required = false)
public void setExcludedPackageNames(String commaDelimitedPackageNames) {
Set<String> excludedPackageNames = this.excludedPackageNames;
excludedPackageNames.addAll(parseExcludedPackageNames(commaDelimitedPackageNames));
this.excludedPackageNames = Collections.unmodifiableSet(excludedPackageNames);
}
private Set<String> parseExcludedPackageNames(String commaDelimitedPackageNames) {
return TextParseUtil.commaDelimitedStringToSet(commaDelimitedPackageNames);
}
@@ -718,13 +722,6 @@ public class OgnlUtil {
return Ognl.createDefaultContext(root, resolver, defaultConverter, memberAccess);
}
protected void addExcludedClasses(String commaDelimitedClasses) {
Set<Class<?>> existingClasses = new HashSet<>(excludedClasses);
existingClasses.addAll(parseExcludedClasses(commaDelimitedClasses));
excludedClasses = Collections.unmodifiableSet(existingClasses);
}
private interface OgnlTask<T> {
T execute(Object tree) throws OgnlException;
}
@@ -59,7 +59,6 @@
freemarker.core.,
freemarker.template.,
freemarker.ext.rhino.,
freemarker.ext.beans.,
sun.reflect.,
javassist.,
com.opensymphony.xwork2.ognl.,
@@ -653,7 +653,7 @@ public class OgnlUtilTest extends XWorkTestCase {
Exception expected = null;
try {
ognlUtil.addExcludedClasses(Object.class.getName());
ognlUtil.setExcludedClasses(Object.class.getName());
ognlUtil.setValue("class.classLoader.defaultAssertionStatus", ognlUtil.createDefaultContext(foo), foo, true);
fail();
} catch (OgnlException e) {
@@ -669,7 +669,7 @@ public class OgnlUtilTest extends XWorkTestCase {
Exception expected = null;
try {
ognlUtil.addExcludedClasses(Object.class.getName());
ognlUtil.setExcludedClasses(Object.class.getName());
ognlUtil.setValue("Class.ClassLoader.DefaultAssertionStatus", ognlUtil.createDefaultContext(foo), foo, true);
fail();
} catch (OgnlException e) {
@@ -685,7 +685,7 @@ public class OgnlUtilTest extends XWorkTestCase {
Exception expected = null;
try {
ognlUtil.addExcludedClasses(Object.class.getName());
ognlUtil.setExcludedClasses(Object.class.getName());
ognlUtil.setValue("class['classLoader']['defaultAssertionStatus']", ognlUtil.createDefaultContext(foo), foo, true);
fail();
} catch (OgnlException e) {
@@ -716,7 +716,7 @@ public class OgnlUtilTest extends XWorkTestCase {
Exception expected = null;
try {
ognlUtil.addExcludedClasses(Object.class.getName());
ognlUtil.setExcludedClasses(Object.class.getName());
ognlUtil.setValue("class[\"classLoader\"]['defaultAssertionStatus']", ognlUtil.createDefaultContext(foo), foo, true);
fail();
} catch (OgnlException e) {
@@ -762,7 +762,7 @@ public class OgnlUtilTest extends XWorkTestCase {
Exception expected = null;
try {
ognlUtil.addExcludedClasses(Runtime.class.getName());
ognlUtil.setExcludedClasses(Runtime.class.getName());
ognlUtil.setValue("@java.lang.Runtime@getRuntime().exec('mate')", ognlUtil.createDefaultContext(foo), foo, true);
fail();
} catch (OgnlException e) {