You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2016/05/05 05:34:15 UTC

struts git commit: WW-4596 Allows redefine regex used to match methods when SMI is disabled

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 <lu...@apache.org>
Authored: Thu May 5 07:33:31 2016 +0200
Committer: Lukasz Lenart <lu...@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()) {