Repository: struts Updated Branches: refs/heads/master c4d2b687b -> 02b207fca
WW-4596 Allows redefine regex used to match methods when SMI is disabled Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/02b207fc Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/02b207fc Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/02b207fc Branch: refs/heads/master Commit: 02b207fca529627f3a34660de86b51444461a7d2 Parents: c4d2b68 Author: Lukasz Lenart <lukaszlen...@apache.org> Authored: Thu May 5 07:33:31 2016 +0200 Committer: Lukasz Lenart <lukaszlen...@apache.org> Committed: Thu May 5 07:34:04 2016 +0200 ---------------------------------------------------------------------- .../opensymphony/xwork2/config/entities/ActionConfig.java | 9 +++++++-- .../xwork2/config/impl/DefaultConfiguration.java | 10 ++++++++++ .../xwork2/config/providers/XmlConfigurationProvider.java | 2 +- .../src/main/java/org/apache/struts2/StrutsConstants.java | 1 + .../convention/PackageBasedActionConfigBuilder.java | 2 +- 5 files changed, 20 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/struts/blob/02b207fc/core/src/main/java/com/opensymphony/xwork2/config/entities/ActionConfig.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/com/opensymphony/xwork2/config/entities/ActionConfig.java b/core/src/main/java/com/opensymphony/xwork2/config/entities/ActionConfig.java index 3e921f4..1958f53 100644 --- a/core/src/main/java/com/opensymphony/xwork2/config/entities/ActionConfig.java +++ b/core/src/main/java/com/opensymphony/xwork2/config/entities/ActionConfig.java @@ -43,7 +43,6 @@ public class ActionConfig extends Located implements Serializable { public static final String DEFAULT_METHOD = "execute"; public static final String WILDCARD = "*"; - public static final String REGEX_WILDCARD = "regex:.*"; public static final String DEFAULT_METHOD_REGEX = "([A-Za-z0-9_$]*)"; protected List<InterceptorMapping> interceptors; // a list of interceptorMapping Objects eg. List<InterceptorMapping> @@ -218,6 +217,7 @@ public class ActionConfig extends Located implements Serializable { protected ActionConfig target; protected Set<String> allowedMethods; + private String methodRegex; public Builder(ActionConfig toClone) { target = new ActionConfig(toClone); @@ -338,12 +338,17 @@ public class ActionConfig extends Located implements Serializable { return this; } + public Builder setDefaultMethodRegex(String methodRegex) { + this.methodRegex = methodRegex; + return this; + } + public ActionConfig build() { target.params = Collections.unmodifiableMap(target.params); target.results = Collections.unmodifiableMap(target.results); target.interceptors = Collections.unmodifiableList(target.interceptors); target.exceptionMappings = Collections.unmodifiableList(target.exceptionMappings); - target.allowedMethods = AllowedMethods.build(target.strictMethodInvocation, allowedMethods, DEFAULT_METHOD_REGEX); + target.allowedMethods = AllowedMethods.build(target.strictMethodInvocation, allowedMethods, methodRegex != null ? methodRegex : DEFAULT_METHOD_REGEX); ActionConfig result = target; target = new ActionConfig(target); http://git-wip-us.apache.org/repos/asf/struts/blob/02b207fc/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java b/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java index 1aa45c1..7426831 100644 --- a/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java +++ b/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java @@ -36,6 +36,7 @@ import ognl.PropertyAccessor; import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.apache.struts2.StrutsConstants; import java.util.*; @@ -370,11 +371,20 @@ public class DefaultConfiguration implements Configuration { } } + String methodRegex = container.getInstance(String.class, StrutsConstants.STRUTS_SMI_METHOD_REGEX); + if (methodRegex == null) { + methodRegex = ActionConfig.DEFAULT_METHOD_REGEX; + } + + LOG.debug("Using pattern [{}] to match allowed methods when SMI is disabled!", methodRegex); + return new ActionConfig.Builder(baseConfig) .addParams(params) .addResultConfigs(results) .defaultClassName(packageContext.getDefaultClassRef()) // fill in default if non class has been provided .interceptors(interceptors) + .setStrictMethodInvocation(packageContext.isStrictMethodInvocation()) + .setDefaultMethodRegex(methodRegex) .addExceptionMappings(packageContext.getAllExceptionMappingConfigs()) .build(); } http://git-wip-us.apache.org/repos/asf/struts/blob/02b207fc/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java b/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java index c87cbea..e761b4b 100644 --- a/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java +++ b/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java @@ -875,7 +875,7 @@ public class XmlConfigurationProvider implements ConfigurationProvider { } else { // Strict DMI is disabled to any method can be called allowedMethods = new HashSet<>(); - allowedMethods.add(ActionConfig.REGEX_WILDCARD); + allowedMethods.add(ActionConfig.WILDCARD); } return Collections.unmodifiableSet(allowedMethods); http://git-wip-us.apache.org/repos/asf/struts/blob/02b207fc/core/src/main/java/org/apache/struts2/StrutsConstants.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/struts2/StrutsConstants.java b/core/src/main/java/org/apache/struts2/StrutsConstants.java index d5b70cf..186e880 100644 --- a/core/src/main/java/org/apache/struts2/StrutsConstants.java +++ b/core/src/main/java/org/apache/struts2/StrutsConstants.java @@ -298,4 +298,5 @@ public final class StrutsConstants { public static final String STRUTS_CONTENT_TYPE_MATCHER = "struts.contentTypeMatcher"; + public static final String STRUTS_SMI_METHOD_REGEX = "struts.strictMethodInvocation.methodRegex"; } http://git-wip-us.apache.org/repos/asf/struts/blob/02b207fc/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java ---------------------------------------------------------------------- diff --git a/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java b/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java index fc85d54..45c71a3 100644 --- a/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java +++ b/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java @@ -930,7 +930,7 @@ public class PackageBasedActionConfigBuilder implements ActionConfigBuilder { actionConfig.addAllowedMethod(allowedMethods); actionConfig.addAllowedMethod(pkgCfg.getGlobalAllowedMethods()); } else { - actionConfig.addAllowedMethod(ActionConfig.REGEX_WILDCARD); + actionConfig.addAllowedMethod(ActionConfig.WILDCARD); } if (LOG.isDebugEnabled()) {