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 2015/09/28 20:52:50 UTC
[01/33] struts git commit: Drops wildcard as a valid action method
Repository: struts
Updated Branches:
refs/heads/master 48ea26be7 -> b88268165
Drops wildcard as a valid action method
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/065b5b79
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/065b5b79
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/065b5b79
Branch: refs/heads/master
Commit: 065b5b79ae068ab7891a4232a0769290fd21bb17
Parents: 0fac539
Author: Lukasz Lenart <lu...@apache.org>
Authored: Mon Aug 31 14:31:59 2015 +0200
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Mon Aug 31 14:31:59 2015 +0200
----------------------------------------------------------------------
.../xwork2/config/entities/ActionConfig.java | 40 +++++++-------------
1 file changed, 13 insertions(+), 27 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/065b5b79/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 b32f2cf..b947ed9 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
@@ -42,7 +42,6 @@ import java.util.*;
public class ActionConfig extends Located implements Serializable {
public static final String DEFAULT_METHOD = "execute";
- public static final String WILDCARD = "*";
protected List<InterceptorMapping> interceptors; // a list of interceptorMapping Objects eg. List<InterceptorMapping>
protected Map<String,String> params;
@@ -58,11 +57,11 @@ public class ActionConfig extends Located implements Serializable {
this.packageName = packageName;
this.name = name;
this.className = className;
- params = new LinkedHashMap<String, String>();
- results = new LinkedHashMap<String, ResultConfig>();
- interceptors = new ArrayList<InterceptorMapping>();
- exceptionMappings = new ArrayList<ExceptionMappingConfig>();
- allowedMethods = new HashSet<String>();
+ params = new LinkedHashMap<>();
+ results = new LinkedHashMap<>();
+ interceptors = new ArrayList<>();
+ exceptionMappings = new ArrayList<>();
+ allowedMethods = new HashSet<>(Collections.singletonList(DEFAULT_METHOD));
}
/**
@@ -128,11 +127,7 @@ public class ActionConfig extends Located implements Serializable {
}
public boolean isAllowedMethod(String method) {
- if (allowedMethods.size() == 1 && WILDCARD.equals(allowedMethods.iterator().next())) {
- return true;
- } else {
- return method.equals(methodName != null ? methodName : DEFAULT_METHOD) || allowedMethods.contains(method);
- }
+ return method.equals(methodName != null ? methodName : DEFAULT_METHOD) || allowedMethods.contains(method);
}
@Override public boolean equals(Object o) {
@@ -214,7 +209,6 @@ public class ActionConfig extends Located implements Serializable {
public static class Builder implements InterceptorListHolder{
protected ActionConfig target;
- private boolean gotMethods;
public Builder(ActionConfig toClone) {
target = new ActionConfig(toClone);
@@ -249,6 +243,7 @@ public class ActionConfig extends Located implements Serializable {
public Builder methodName(String method) {
target.methodName = method;
+ addAllowedMethod(method);
return this;
}
@@ -317,10 +312,7 @@ public class ActionConfig extends Located implements Serializable {
}
public Builder addAllowedMethod(Collection<String> methods) {
- if (methods != null) {
- gotMethods = true;
- target.allowedMethods.addAll(methods);
- }
+ target.allowedMethods.addAll(methods);
return this;
}
@@ -330,22 +322,16 @@ public class ActionConfig extends Located implements Serializable {
}
public ActionConfig build() {
- embalmTarget();
- ActionConfig result = target;
- target = new ActionConfig(target);
- return result;
- }
-
- protected void embalmTarget() {
- if (!gotMethods && target.allowedMethods.isEmpty()) {
- target.allowedMethods.add(WILDCARD);
- }
-
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 = Collections.unmodifiableSet(target.allowedMethods);
+
+ ActionConfig result = target;
+ target = new ActionConfig(target);
+ return result;
}
+
}
}
[29/33] struts git commit: Includes additional global allowed methods
Posted by lu...@apache.org.
Includes additional global allowed methods
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/e3743111
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/e3743111
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/e3743111
Branch: refs/heads/master
Commit: e3743111ffe13eec93232e5e71a56e5ac1fca0a5
Parents: d511d28
Author: Lukasz Lenart <lu...@gmail.com>
Authored: Tue Sep 15 09:02:38 2015 +0200
Committer: Lukasz Lenart <lu...@gmail.com>
Committed: Tue Sep 15 09:02:38 2015 +0200
----------------------------------------------------------------------
core/src/main/resources/struts-default.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/e3743111/core/src/main/resources/struts-default.xml
----------------------------------------------------------------------
diff --git a/core/src/main/resources/struts-default.xml b/core/src/main/resources/struts-default.xml
index 2dd6b75..b95a1a0 100644
--- a/core/src/main/resources/struts-default.xml
+++ b/core/src/main/resources/struts-default.xml
@@ -362,7 +362,7 @@
<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
- <global-allowed-methods>execute,input,back,cancel,browse</global-allowed-methods>
+ <global-allowed-methods>execute,input,back,cancel,browse,save,delete,list,index</global-allowed-methods>
</package>
[12/33] struts git commit: Adds missing comma
Posted by lu...@apache.org.
Adds missing comma
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/63bb6e30
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/63bb6e30
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/63bb6e30
Branch: refs/heads/master
Commit: 63bb6e30e75facf5382608857494cf971f0378dd
Parents: 47a01ea
Author: Lukasz Lenart <lu...@apache.org>
Authored: Mon Aug 31 21:06:06 2015 +0200
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Mon Aug 31 21:06:06 2015 +0200
----------------------------------------------------------------------
core/src/main/resources/struts-2.5.dtd | 2 +-
core/src/main/resources/struts-default.xml | 5 +++--
2 files changed, 4 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/63bb6e30/core/src/main/resources/struts-2.5.dtd
----------------------------------------------------------------------
diff --git a/core/src/main/resources/struts-2.5.dtd b/core/src/main/resources/struts-2.5.dtd
index 6591ddb..0845eee 100644
--- a/core/src/main/resources/struts-2.5.dtd
+++ b/core/src/main/resources/struts-2.5.dtd
@@ -37,7 +37,7 @@
order CDATA #IMPLIED
>
-<!ELEMENT package (result-types?, interceptors?, default-interceptor-ref?, default-action-ref?, default-class-ref?, global-results?, global-allowed-methods? global-exception-mappings?, action*)>
+<!ELEMENT package (result-types?, interceptors?, default-interceptor-ref?, default-action-ref?, default-class-ref?, global-results?, global-allowed-methods?, global-exception-mappings?, action*)>
<!ATTLIST package
name CDATA #REQUIRED
extends CDATA #IMPLIED
http://git-wip-us.apache.org/repos/asf/struts/blob/63bb6e30/core/src/main/resources/struts-default.xml
----------------------------------------------------------------------
diff --git a/core/src/main/resources/struts-default.xml b/core/src/main/resources/struts-default.xml
index d7a0ee0..f1684e5 100644
--- a/core/src/main/resources/struts-default.xml
+++ b/core/src/main/resources/struts-default.xml
@@ -358,11 +358,12 @@
</interceptors>
- <global-allowed-methods>execute,input,back,cancel,browse</global-allowed-methods>
-
<default-interceptor-ref name="defaultStack"/>
<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
+
+ <global-allowed-methods>execute,input,back,cancel,browse</global-allowed-methods>
+
</package>
</struts>
[05/33] struts git commit: Drops outdated attribute
Posted by lu...@apache.org.
Drops outdated attribute
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/fb0c4a58
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/fb0c4a58
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/fb0c4a58
Branch: refs/heads/master
Commit: fb0c4a58507c7fb1af135bb376af5b475f43d7ee
Parents: 55b8070
Author: Lukasz Lenart <lu...@apache.org>
Authored: Mon Aug 31 14:42:44 2015 +0200
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Mon Aug 31 14:42:44 2015 +0200
----------------------------------------------------------------------
.../xwork2/config/providers/XmlConfigurationProvider.java | 5 -----
core/src/main/resources/struts-2.5.dtd | 1 -
2 files changed, 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/fb0c4a58/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 449d254..fd9f92a 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
@@ -649,11 +649,6 @@ public class XmlConfigurationProvider implements ConfigurationProvider {
String name = StringUtils.defaultString(packageElement.getAttribute("name"));
String namespace = StringUtils.defaultString(packageElement.getAttribute("namespace"));
- if (StringUtils.isNotEmpty(packageElement.getAttribute("externalReferenceResolver"))) {
- throw new ConfigurationException("The 'externalReferenceResolver' attribute has been removed. Please use " +
- "a custom ObjectFactory or Interceptor.", packageElement);
- }
-
PackageConfig.Builder cfg = new PackageConfig.Builder(name)
.namespace(namespace)
.isAbstract(isAbstract)
http://git-wip-us.apache.org/repos/asf/struts/blob/fb0c4a58/core/src/main/resources/struts-2.5.dtd
----------------------------------------------------------------------
diff --git a/core/src/main/resources/struts-2.5.dtd b/core/src/main/resources/struts-2.5.dtd
index 86afbc0..25ca800 100644
--- a/core/src/main/resources/struts-2.5.dtd
+++ b/core/src/main/resources/struts-2.5.dtd
@@ -43,7 +43,6 @@
extends CDATA #IMPLIED
namespace CDATA #IMPLIED
abstract CDATA #IMPLIED
- externalReferenceResolver NMTOKEN #IMPLIED
>
<!ELEMENT result-types (result-type+)>
[25/33] struts git commit: Enables Strict DMI by default
Posted by lu...@apache.org.
Enables Strict DMI by default
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/e9e6ae90
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/e9e6ae90
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/e9e6ae90
Branch: refs/heads/master
Commit: e9e6ae90e6d7efc931b1738c55fa052045b7bef5
Parents: 3ccd730
Author: Lukasz Lenart <lu...@gmail.com>
Authored: Fri Sep 4 11:44:44 2015 +0200
Committer: Lukasz Lenart <lu...@gmail.com>
Committed: Fri Sep 4 11:44:44 2015 +0200
----------------------------------------------------------------------
core/src/main/resources/struts-default.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/e9e6ae90/core/src/main/resources/struts-default.xml
----------------------------------------------------------------------
diff --git a/core/src/main/resources/struts-default.xml b/core/src/main/resources/struts-default.xml
index f1684e5..2dd6b75 100644
--- a/core/src/main/resources/struts-default.xml
+++ b/core/src/main/resources/struts-default.xml
@@ -165,7 +165,7 @@
<bean type="com.opensymphony.xwork2.security.ExcludedPatternsChecker" name="struts" class="com.opensymphony.xwork2.security.DefaultExcludedPatternsChecker" scope="prototype" />
<bean type="com.opensymphony.xwork2.security.AcceptedPatternsChecker" name="struts" class="com.opensymphony.xwork2.security.DefaultAcceptedPatternsChecker" scope="prototype" />
- <package name="struts-default" abstract="true">
+ <package name="struts-default" abstract="true" strict-method-invocation="true">
<result-types>
<result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
<result-type name="dispatcher" class="org.apache.struts2.result.ServletDispatcherResult" default="true"/>
[15/33] struts git commit: Fixes test
Posted by lu...@apache.org.
Fixes test
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/dd406fbb
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/dd406fbb
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/dd406fbb
Branch: refs/heads/master
Commit: dd406fbb04e755c0545c318c3ea099674fb78363
Parents: 7769156
Author: Lukasz Lenart <lu...@apache.org>
Authored: Mon Aug 31 21:46:55 2015 +0200
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Mon Aug 31 21:46:55 2015 +0200
----------------------------------------------------------------------
.../src/test/java/org/apache/struts2/TestConfigurationProvider.java | 1 +
1 file changed, 1 insertion(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/dd406fbb/core/src/test/java/org/apache/struts2/TestConfigurationProvider.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/struts2/TestConfigurationProvider.java b/core/src/test/java/org/apache/struts2/TestConfigurationProvider.java
index aee8473..0eebd85 100644
--- a/core/src/test/java/org/apache/struts2/TestConfigurationProvider.java
+++ b/core/src/test/java/org/apache/struts2/TestConfigurationProvider.java
@@ -127,6 +127,7 @@ public class TestConfigurationProvider implements ConfigurationProvider {
.addActionConfig("testActionTagAction", new ActionConfig.Builder("", "", TestAction.class.getName())
.addResultConfig(new ResultConfig.Builder(Action.SUCCESS, TestActionTagResult.class.getName()).build())
.addResultConfig(new ResultConfig.Builder(Action.INPUT, TestActionTagResult.class.getName()).build())
+ .addAllowedMethod("input")
.build())
.build();
[20/33] struts git commit: Adds toString implementations
Posted by lu...@apache.org.
Adds toString implementations
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/f1dbc5a7
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/f1dbc5a7
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/f1dbc5a7
Branch: refs/heads/master
Commit: f1dbc5a71914f4159d9aa0f0a8b6c8bfbd37f864
Parents: cb06d7d
Author: Lukasz Lenart <lu...@gmail.com>
Authored: Fri Sep 4 09:24:11 2015 +0200
Committer: Lukasz Lenart <lu...@gmail.com>
Committed: Fri Sep 4 09:24:11 2015 +0200
----------------------------------------------------------------------
.../xwork2/config/entities/AllowedMethods.java | 15 +++++++++++++++
1 file changed, 15 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/f1dbc5a7/core/src/main/java/com/opensymphony/xwork2/config/entities/AllowedMethods.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/config/entities/AllowedMethods.java b/core/src/main/java/com/opensymphony/xwork2/config/entities/AllowedMethods.java
index 7582696..e8796b1 100644
--- a/core/src/main/java/com/opensymphony/xwork2/config/entities/AllowedMethods.java
+++ b/core/src/main/java/com/opensymphony/xwork2/config/entities/AllowedMethods.java
@@ -117,6 +117,14 @@ public class AllowedMethods {
public int hashCode() {
return original.hashCode();
}
+
+ @Override
+ public String toString() {
+ return "PatternAllowedMethod{" +
+ "allowedMethodPattern=" + allowedMethodPattern +
+ ", original='" + original + '\'' +
+ '}';
+ }
}
private static class LiteralAllowedMethod implements AllowedMethod {
@@ -152,6 +160,13 @@ public class AllowedMethods {
public int hashCode() {
return allowedMethod.hashCode();
}
+
+ @Override
+ public String toString() {
+ return "LiteralAllowedMethod{" +
+ "allowedMethod='" + allowedMethod + '\'' +
+ '}';
+ }
}
}
[04/33] struts git commit: Drops strict DMI
Posted by lu...@apache.org.
Drops strict DMI
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/55b80700
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/55b80700
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/55b80700
Branch: refs/heads/master
Commit: 55b8070048cbec0a6e08b1781f81b1bfdb3354f2
Parents: fd22e3a
Author: Lukasz Lenart <lu...@apache.org>
Authored: Mon Aug 31 14:41:57 2015 +0200
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Mon Aug 31 14:41:57 2015 +0200
----------------------------------------------------------------------
core/src/main/resources/xwork-2.5.dtd | 1 -
1 file changed, 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/55b80700/core/src/main/resources/xwork-2.5.dtd
----------------------------------------------------------------------
diff --git a/core/src/main/resources/xwork-2.5.dtd b/core/src/main/resources/xwork-2.5.dtd
index efbd765..4d3e1ca 100644
--- a/core/src/main/resources/xwork-2.5.dtd
+++ b/core/src/main/resources/xwork-2.5.dtd
@@ -22,7 +22,6 @@
extends CDATA #IMPLIED
namespace CDATA #IMPLIED
abstract CDATA #IMPLIED
- strict-method-invocation CDATA #IMPLIED
>
<!ELEMENT result-types (result-type+)>
[21/33] struts git commit: Adds basic test case
Posted by lu...@apache.org.
Adds basic test case
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/7db5e761
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/7db5e761
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/7db5e761
Branch: refs/heads/master
Commit: 7db5e76133e22e86e0af0687fe1b3f1b80bfc09a
Parents: f1dbc5a
Author: Lukasz Lenart <lu...@gmail.com>
Authored: Fri Sep 4 09:24:18 2015 +0200
Committer: Lukasz Lenart <lu...@gmail.com>
Committed: Fri Sep 4 09:24:18 2015 +0200
----------------------------------------------------------------------
.../config/entities/AllowedMethodsTest.java | 55 ++++++++++++++++++++
1 file changed, 55 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/7db5e761/core/src/test/java/com/opensymphony/xwork2/config/entities/AllowedMethodsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/com/opensymphony/xwork2/config/entities/AllowedMethodsTest.java b/core/src/test/java/com/opensymphony/xwork2/config/entities/AllowedMethodsTest.java
new file mode 100644
index 0000000..78f3094
--- /dev/null
+++ b/core/src/test/java/com/opensymphony/xwork2/config/entities/AllowedMethodsTest.java
@@ -0,0 +1,55 @@
+package com.opensymphony.xwork2.config.entities;
+
+import junit.framework.TestCase;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public class AllowedMethodsTest extends TestCase {
+
+ public void testLiteralMethods() throws Exception {
+ // given
+ String method = "myMethod";
+ Set<String> literals = new HashSet<>();
+ literals.add(method);
+
+ // when
+ AllowedMethods allowedMethods = AllowedMethods.build(literals);
+
+ // then
+ assertEquals(1, allowedMethods.list().size());
+ assertTrue(allowedMethods.isAllowed(method));
+ assertFalse(allowedMethods.isAllowed("someOtherMethod"));
+ }
+
+ public void testWidlcardMethods() throws Exception {
+ // given
+ String method = "my{1}";
+ Set<String> literals = new HashSet<>();
+ literals.add(method);
+
+ // when
+ AllowedMethods allowedMethods = AllowedMethods.build(literals);
+
+ // then
+ assertEquals(1, allowedMethods.list().size());
+ assertTrue(allowedMethods.isAllowed("myMethod"));
+ assertFalse(allowedMethods.isAllowed("someOtherMethod"));
+ }
+
+ public void testRegexMethods() throws Exception {
+ // given
+ String method = "regex:my([a-zA-Z].*)";
+ Set<String> literals = new HashSet<>();
+ literals.add(method);
+
+ // when
+ AllowedMethods allowedMethods = AllowedMethods.build(literals);
+
+ // then
+ assertEquals(1, allowedMethods.list().size());
+ assertTrue(allowedMethods.isAllowed("myMethod"));
+ assertFalse(allowedMethods.isAllowed("someOtherMethod"));
+ }
+
+}
[16/33] struts git commit: Adds annotation to support AllowedMethods
Posted by lu...@apache.org.
Adds annotation to support AllowedMethods
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/ab5fb27d
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/ab5fb27d
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/ab5fb27d
Branch: refs/heads/master
Commit: ab5fb27d368f8857e137bc3a319c21fc85b519ee
Parents: dd406fb
Author: Lukasz Lenart <lu...@gmail.com>
Authored: Thu Sep 3 13:03:55 2015 +0200
Committer: Lukasz Lenart <lu...@gmail.com>
Committed: Thu Sep 3 13:03:55 2015 +0200
----------------------------------------------------------------------
.../xwork2/config/entities/PackageConfig.java | 13 ++++-
.../PackageBasedActionConfigBuilder.java | 30 ++++++++--
.../convention/annotation/AllowedMethods.java | 30 ++++++++++
.../PackageBasedActionConfigBuilderTest.java | 60 ++++++++++++++++++--
.../ClassLevelAllowedMethodsAction.java | 10 ++++
.../PackageLevelAllowedMethodsAction.java | 7 +++
.../actions/allowedmethods/package-info.java | 23 ++++++++
.../PackageLevelAllowedMethodsChildAction.java | 9 +++
8 files changed, 171 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/ab5fb27d/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java b/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
index 19ce36f..093985c 100644
--- a/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
+++ b/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
@@ -531,7 +531,18 @@ public class PackageConfig extends Located implements Comparable, Serializable,
}
public Set<String> getGlobalAllowedMethods() {
- return target.globalAllowedMethods;
+ Set <String> allowedMethods = target.globalAllowedMethods;
+ allowedMethods.addAll(getParentsAllowedMethods(target.parents));
+ return allowedMethods;
+ }
+
+ public Set<String> getParentsAllowedMethods(List<PackageConfig> parents) {
+ Set<String> allowedMethods = new HashSet<>();
+ for (PackageConfig parent : parents) {
+ allowedMethods.addAll(parent.globalAllowedMethods);
+ allowedMethods.addAll(getParentsAllowedMethods(parent.getParents()));
+ }
+ return allowedMethods;
}
public Builder addGlobalAllowedMethods(Set<String> allowedMethods) {
http://git-wip-us.apache.org/repos/asf/struts/blob/ab5fb27d/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 b4a8be9..64a0e98 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
@@ -42,6 +42,7 @@ import org.apache.logging.log4j.Logger;
import org.apache.struts2.StrutsConstants;
import org.apache.struts2.StrutsException;
import org.apache.struts2.convention.annotation.*;
+import org.apache.struts2.convention.annotation.AllowedMethods;
import java.io.IOException;
import java.lang.reflect.Method;
@@ -652,6 +653,8 @@ public class PackageBasedActionConfigBuilder implements ActionConfigBuilder {
String actionPackage = actionClass.getPackage().getName();
LOG.debug("Processing class [{}] in package [{}]", actionClass.getName(), actionPackage);
+ Set<String> allowedMethods = getAllowedMethods(actionClass);
+
// Determine the default namespace and action name
List<String> namespaces = determineActionNamespace(actionClass);
for (String namespace : namespaces) {
@@ -692,7 +695,7 @@ public class PackageBasedActionConfigBuilder implements ActionConfigBuilder {
// Build the default
if (!found) {
- createActionConfig(defaultPackageConfig, actionClass, defaultActionName, DEFAULT_METHOD, null);
+ createActionConfig(defaultPackageConfig, actionClass, defaultActionName, DEFAULT_METHOD, null, allowedMethods);
}
}
@@ -706,14 +709,14 @@ public class PackageBasedActionConfigBuilder implements ActionConfigBuilder {
actionClass, action);
}
- createActionConfig(pkgCfg, actionClass, defaultActionName, method, action);
+ createActionConfig(pkgCfg, actionClass, defaultActionName, method, action, allowedMethods);
}
}
// some actions will not have any @Action or a default method, like the rest actions
// where the action mapper is the one that finds the right method at runtime
if (map.isEmpty() && mapAllMatches && actionAnnotation == null && actionsAnnotation == null) {
- createActionConfig(defaultPackageConfig, actionClass, defaultActionName, null, actionAnnotation);
+ createActionConfig(defaultPackageConfig, actionClass, defaultActionName, null, actionAnnotation, allowedMethods);
}
//if there are @Actions or @Action at the class level, create the mappings for them
@@ -721,9 +724,9 @@ public class PackageBasedActionConfigBuilder implements ActionConfigBuilder {
if (actionsAnnotation != null) {
List<Action> actionAnnotations = checkActionsAnnotation(actionsAnnotation);
for (Action actionAnnotation2 : actionAnnotations)
- createActionConfig(defaultPackageConfig, actionClass, defaultActionName, methodName, actionAnnotation2);
+ createActionConfig(defaultPackageConfig, actionClass, defaultActionName, methodName, actionAnnotation2, allowedMethods);
} else if (actionAnnotation != null)
- createActionConfig(defaultPackageConfig, actionClass, defaultActionName, methodName, actionAnnotation);
+ createActionConfig(defaultPackageConfig, actionClass, defaultActionName, methodName, actionAnnotation, allowedMethods);
}
}
@@ -736,6 +739,15 @@ public class PackageBasedActionConfigBuilder implements ActionConfigBuilder {
}
}
+ private Set<String> getAllowedMethods(Class<?> actionClass) {
+ AllowedMethods annotation = AnnotationUtils.findAnnotation(actionClass, AllowedMethods.class);
+ if (annotation == null) {
+ return Collections.emptySet();
+ } else {
+ return TextParseUtil.commaDelimitedStringToSet(annotation.value());
+ }
+ }
+
/**
* Interfaces, enums, annotations, and abstract classes cannot be instantiated.
* @param actionClass class to check
@@ -896,7 +908,7 @@ public class PackageBasedActionConfigBuilder implements ActionConfigBuilder {
* @param annotation The ActionName annotation that might override the action name and possibly
*/
protected void createActionConfig(PackageConfig.Builder pkgCfg, Class<?> actionClass, String actionName,
- String actionMethod, Action annotation) {
+ String actionMethod, Action annotation, Set<String> allowedMethods) {
String className = actionClass.getName();
if (annotation != null) {
actionName = annotation.value() != null && annotation.value().equals(Action.DEFAULT_VALUE) ? actionName : annotation.value();
@@ -909,6 +921,12 @@ public class PackageBasedActionConfigBuilder implements ActionConfigBuilder {
ActionConfig.Builder actionConfig = new ActionConfig.Builder(pkgCfg.getName(), actionName, className);
actionConfig.methodName(actionMethod);
+ if (!allowedMethods.contains(actionMethod)) {
+ actionConfig.addAllowedMethod(actionMethod);
+ }
+ actionConfig.addAllowedMethod(allowedMethods);
+ actionConfig.addAllowedMethod(pkgCfg.getGlobalAllowedMethods());
+
if (LOG.isDebugEnabled()) {
LOG.debug("Creating action config for class [{}], name [{}] and package name [{}] in namespace [{}]",
actionClass.toString(), actionName, pkgCfg.getName(), pkgCfg.getNamespace());
http://git-wip-us.apache.org/repos/asf/struts/blob/ab5fb27d/plugins/convention/src/main/java/org/apache/struts2/convention/annotation/AllowedMethods.java
----------------------------------------------------------------------
diff --git a/plugins/convention/src/main/java/org/apache/struts2/convention/annotation/AllowedMethods.java b/plugins/convention/src/main/java/org/apache/struts2/convention/annotation/AllowedMethods.java
new file mode 100644
index 0000000..8e3c9ab
--- /dev/null
+++ b/plugins/convention/src/main/java/org/apache/struts2/convention/annotation/AllowedMethods.java
@@ -0,0 +1,30 @@
+package org.apache.struts2.convention.annotation;
+
+import com.opensymphony.xwork2.config.entities.ActionConfig;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * <!-- START SNIPPET: javadoc -->
+ * <p>
+ * This annotation allows actions to specify allowed action methods
+ * to limit access to any other public action's methods
+ * </p>
+ *
+ * <p>
+ * This annotation can be used directly on Action classes or
+ * in the <strong>package-info.java</strong> class in order
+ * to specify global allowed methods for all sub-packages.
+ * </p>
+ * <!-- END SNIPPET: javadoc -->
+ */
+@Target({ElementType.TYPE, ElementType.PACKAGE})
+@Retention(value = RetentionPolicy.RUNTIME)
+public @interface AllowedMethods {
+
+ String value() default ActionConfig.DEFAULT_METHOD;
+
+}
http://git-wip-us.apache.org/repos/asf/struts/blob/ab5fb27d/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
----------------------------------------------------------------------
diff --git a/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java b/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
index 38403a0..61ed3eb 100644
--- a/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
+++ b/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
@@ -29,6 +29,7 @@ import com.opensymphony.xwork2.factory.DefaultResultFactory;
import com.opensymphony.xwork2.inject.Container;
import com.opensymphony.xwork2.inject.Scope.Strategy;
import com.opensymphony.xwork2.ognl.OgnlReflectionProvider;
+import com.opensymphony.xwork2.util.TextParseUtil;
import com.opensymphony.xwork2.util.fs.DefaultFileManager;
import com.opensymphony.xwork2.util.fs.DefaultFileManagerFactory;
import com.opensymphony.xwork2.util.reflection.ReflectionException;
@@ -37,6 +38,9 @@ import org.apache.struts2.convention.actions.DefaultResultPathAction;
import org.apache.struts2.convention.actions.NoAnnotationAction;
import org.apache.struts2.convention.actions.Skip;
import org.apache.struts2.convention.actions.action.*;
+import org.apache.struts2.convention.actions.allowedmethods.ClassLevelAllowedMethodsAction;
+import org.apache.struts2.convention.actions.allowedmethods.PackageLevelAllowedMethodsAction;
+import org.apache.struts2.convention.actions.allowedmethods.sub.PackageLevelAllowedMethodsChildAction;
import org.apache.struts2.convention.actions.chain.ChainedAction;
import org.apache.struts2.convention.actions.defaultinterceptor.SingleActionNameAction2;
import org.apache.struts2.convention.actions.exception.ExceptionsActionLevelAction;
@@ -125,8 +129,10 @@ public class PackageBasedActionConfigBuilderTest extends TestCase {
new ResultTypeConfig.Builder("chain",
ActionChainResult.class.getName()).defaultResultParam("actionName").build()};
+ Set<String> globalAllowedMethods = TextParseUtil.commaDelimitedStringToSet("execute,browse,cancel,input");
+
PackageConfig strutsDefault = makePackageConfig("struts-default", null, null, "dispatcher",
- defaultResults, defaultInterceptors, defaultInterceptorStacks);
+ defaultResults, defaultInterceptors, defaultInterceptorStacks, globalAllowedMethods);
PackageConfig packageLevelParentPkg = makePackageConfig("package-level", null, null, null);
PackageConfig classLevelParentPkg = makePackageConfig("class-level", null, null, null);
@@ -151,6 +157,16 @@ public class PackageBasedActionConfigBuilderTest extends TestCase {
"/parentpackage", packageLevelParentPkg, null);
PackageConfig packageLevelSubPkg = makePackageConfig("org.apache.struts2.convention.actions.parentpackage.sub#package-level#/parentpackage/sub",
"/parentpackage/sub", packageLevelParentPkg, null);
+
+ // Unexpected method call build(class org.apache.struts2.convention.actions.allowedmethods.PackageLevelAllowedMethodsAction, null, "package-level-allowed-methods", PackageConfig: [org.apache.struts2.convention.actions.allowedmethods#struts-default#/allowedmethods] for namespace [/allowedmethods] with parents [[PackageConfig: [struts-default] for namespace [] with parents [[]]]]):
+ PackageConfig packageLevelAllowedMethodsPkg = makePackageConfig("org.apache.struts2.convention.actions.allowedmethods#struts-default#/allowedmethods",
+ "/allowedmethods", strutsDefault, null);
+ PackageConfig packageLevelAllowedMethodsSubPkg = makePackageConfig("org.apache.struts2.convention.actions.allowedmethods.sub#struts-default#/allowedmethods/sub",
+ "/allowedmethods/sub", strutsDefault, null);
+
+ PackageConfig classLevelAllowedMethodsPkg = makePackageConfig("org.apache.struts2.convention.actions.allowedmethods#struts-default#/allowedmethods",
+ "/allowedmethods", strutsDefault, null);
+
PackageConfig differentPkg = makePackageConfig("org.apache.struts2.convention.actions.parentpackage#class-level#/parentpackage",
"/parentpackage", classLevelParentPkg, null);
PackageConfig differentSubPkg = makePackageConfig("org.apache.struts2.convention.actions.parentpackage.sub#class-level#/parentpackage/sub",
@@ -261,6 +277,11 @@ public class PackageBasedActionConfigBuilderTest extends TestCase {
expect(resultMapBuilder.build(ClassLevelParentPackageAction.class, null, "class-level-parent-package", differentPkg)).andReturn(results);
expect(resultMapBuilder.build(ClassLevelParentPackageChildAction.class, null, "class-level-parent-package-child", differentSubPkg)).andReturn(results);
+ /* org.apache.struts2.convention.actions.allowedmethods */
+ expect(resultMapBuilder.build(ClassLevelAllowedMethodsAction.class, null, "class-level-allowed-methods", classLevelAllowedMethodsPkg)).andReturn(results);
+ expect(resultMapBuilder.build(PackageLevelAllowedMethodsAction.class, null, "package-level-allowed-methods", packageLevelAllowedMethodsPkg)).andReturn(results);
+ expect(resultMapBuilder.build(PackageLevelAllowedMethodsChildAction.class, null, "package-level-allowed-methods-child", packageLevelAllowedMethodsSubPkg)).andReturn(results);
+
/* org.apache.struts2.convention.actions.result */
expect(resultMapBuilder.build(ClassLevelResultAction.class, null, "class-level-result", resultPkg)).andReturn(results);
expect(resultMapBuilder.build(ClassLevelResultsAction.class, null, "class-level-results", resultPkg)).andReturn(results);
@@ -450,7 +471,7 @@ public class PackageBasedActionConfigBuilderTest extends TestCase {
verifyActionConfig(pkgConfig, "", org.apache.struts2.convention.actions.idx.Index.class, "execute", pkgConfig.getName());
verifyActionConfig(pkgConfig, "index", org.apache.struts2.convention.actions.idx.Index.class, "execute", pkgConfig.getName());
verifyActionConfig(pkgConfig, "idx2", org.apache.struts2.convention.actions.idx.idx2.Index.class, "execute",
- "org.apache.struts2.convention.actions.idx.idx2#struts-default#/idx/idx2");
+ "org.apache.struts2.convention.actions.idx.idx2#struts-default#/idx/idx2");
/* org.apache.struts2.convention.actions.defaultinterceptor */
pkgConfig = configuration.getPackageConfig("org.apache.struts2.convention.actions.defaultinterceptor#struts-default#/defaultinterceptor");
@@ -514,6 +535,33 @@ public class PackageBasedActionConfigBuilderTest extends TestCase {
verifyActionConfig(pkgConfig, "package-level-parent-package-child", PackageLevelParentPackageChildAction.class, "execute", pkgConfig.getName());
assertEquals("package-level", pkgConfig.getParents().get(0).getName());
+ /* org.apache.struts2.convention.actions.allowedmethods class level */
+ pkgConfig = configuration.getPackageConfig("org.apache.struts2.convention.actions.allowedmethods#struts-default#/allowedmethods");
+ assertNotNull(pkgConfig);
+ assertEquals(2, pkgConfig.getActionConfigs().size());
+ verifyActionConfig(pkgConfig, "class-level-allowed-methods", ClassLevelAllowedMethodsAction.class, "execute", pkgConfig.getName());
+ assertEquals("struts-default", pkgConfig.getParents().get(0).getName());
+
+ ActionConfig actionConfig = pkgConfig.getActionConfigs().get("class-level-allowed-methods");
+ assertEquals(actionConfig.getAllowedMethods().size(), 5);
+ assertTrue(actionConfig.getAllowedMethods().contains("execute"));
+ assertTrue(actionConfig.getAllowedMethods().contains("end"));
+ assertTrue(actionConfig.getAllowedMethods().contains("input"));
+
+ /* org.apache.struts2.convention.actions.allowedmethods.sub package level */
+ pkgConfig = configuration.getPackageConfig("org.apache.struts2.convention.actions.allowedmethods.sub#struts-default#/allowedmethods/sub");
+ assertNotNull(pkgConfig);
+ assertEquals(1, pkgConfig.getActionConfigs().size());
+ verifyActionConfig(pkgConfig, "package-level-allowed-methods-child", PackageLevelAllowedMethodsChildAction.class, "execute", pkgConfig.getName());
+ assertEquals("struts-default", pkgConfig.getParents().get(0).getName());
+
+ actionConfig = pkgConfig.getActionConfigs().get("package-level-allowed-methods-child");
+ assertEquals(actionConfig.getAllowedMethods().size(), 6);
+ assertTrue(actionConfig.getAllowedMethods().contains("execute"));
+ assertTrue(actionConfig.getAllowedMethods().contains("home"));
+ assertTrue(actionConfig.getAllowedMethods().contains("start"));
+ assertTrue(actionConfig.getAllowedMethods().contains("input"));
+
/* org.apache.struts2.convention.actions.result */
pkgConfig = configuration.getPackageConfig("org.apache.struts2.convention.actions.result#struts-default#/result");
assertNotNull(pkgConfig);
@@ -631,12 +679,12 @@ public class PackageBasedActionConfigBuilderTest extends TestCase {
private PackageConfig makePackageConfig(String name, String namespace, PackageConfig parent,
String defaultResultType, ResultTypeConfig... results) {
- return makePackageConfig(name, namespace, parent, defaultResultType, results, null, null);
+ return makePackageConfig(name, namespace, parent, defaultResultType, results, null, null, null);
}
private PackageConfig makePackageConfig(String name, String namespace, PackageConfig parent,
String defaultResultType, ResultTypeConfig[] results, List<InterceptorConfig> interceptors,
- List<InterceptorStackConfig> interceptorStacks) {
+ List<InterceptorStackConfig> interceptorStacks, Set<String> globalAllowedMethods) {
PackageConfig.Builder builder = new PackageConfig.Builder(name);
if (namespace != null) {
builder.namespace(namespace);
@@ -663,6 +711,10 @@ public class PackageBasedActionConfigBuilderTest extends TestCase {
}
}
+ if (globalAllowedMethods != null) {
+ builder.addGlobalAllowedMethods(globalAllowedMethods);
+ }
+
return new MyPackageConfig(builder.build());
}
http://git-wip-us.apache.org/repos/asf/struts/blob/ab5fb27d/plugins/convention/src/test/java/org/apache/struts2/convention/actions/allowedmethods/ClassLevelAllowedMethodsAction.java
----------------------------------------------------------------------
diff --git a/plugins/convention/src/test/java/org/apache/struts2/convention/actions/allowedmethods/ClassLevelAllowedMethodsAction.java b/plugins/convention/src/test/java/org/apache/struts2/convention/actions/allowedmethods/ClassLevelAllowedMethodsAction.java
new file mode 100644
index 0000000..24ea489
--- /dev/null
+++ b/plugins/convention/src/test/java/org/apache/struts2/convention/actions/allowedmethods/ClassLevelAllowedMethodsAction.java
@@ -0,0 +1,10 @@
+package org.apache.struts2.convention.actions.allowedmethods;
+
+import org.apache.struts2.convention.annotation.AllowedMethods;
+
+@AllowedMethods("end")
+public class ClassLevelAllowedMethodsAction {
+
+ public String execute() { return null; }
+
+}
http://git-wip-us.apache.org/repos/asf/struts/blob/ab5fb27d/plugins/convention/src/test/java/org/apache/struts2/convention/actions/allowedmethods/PackageLevelAllowedMethodsAction.java
----------------------------------------------------------------------
diff --git a/plugins/convention/src/test/java/org/apache/struts2/convention/actions/allowedmethods/PackageLevelAllowedMethodsAction.java b/plugins/convention/src/test/java/org/apache/struts2/convention/actions/allowedmethods/PackageLevelAllowedMethodsAction.java
new file mode 100644
index 0000000..eab0895
--- /dev/null
+++ b/plugins/convention/src/test/java/org/apache/struts2/convention/actions/allowedmethods/PackageLevelAllowedMethodsAction.java
@@ -0,0 +1,7 @@
+package org.apache.struts2.convention.actions.allowedmethods;
+
+public class PackageLevelAllowedMethodsAction {
+
+ public String execute() { return null; }
+
+}
http://git-wip-us.apache.org/repos/asf/struts/blob/ab5fb27d/plugins/convention/src/test/java/org/apache/struts2/convention/actions/allowedmethods/package-info.java
----------------------------------------------------------------------
diff --git a/plugins/convention/src/test/java/org/apache/struts2/convention/actions/allowedmethods/package-info.java b/plugins/convention/src/test/java/org/apache/struts2/convention/actions/allowedmethods/package-info.java
new file mode 100644
index 0000000..461131f
--- /dev/null
+++ b/plugins/convention/src/test/java/org/apache/struts2/convention/actions/allowedmethods/package-info.java
@@ -0,0 +1,23 @@
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+@org.apache.struts2.convention.annotation.AllowedMethods("home,start")
+package org.apache.struts2.convention.actions.allowedmethods;
+
http://git-wip-us.apache.org/repos/asf/struts/blob/ab5fb27d/plugins/convention/src/test/java/org/apache/struts2/convention/actions/allowedmethods/sub/PackageLevelAllowedMethodsChildAction.java
----------------------------------------------------------------------
diff --git a/plugins/convention/src/test/java/org/apache/struts2/convention/actions/allowedmethods/sub/PackageLevelAllowedMethodsChildAction.java b/plugins/convention/src/test/java/org/apache/struts2/convention/actions/allowedmethods/sub/PackageLevelAllowedMethodsChildAction.java
new file mode 100644
index 0000000..4a6223d
--- /dev/null
+++ b/plugins/convention/src/test/java/org/apache/struts2/convention/actions/allowedmethods/sub/PackageLevelAllowedMethodsChildAction.java
@@ -0,0 +1,9 @@
+package org.apache.struts2.convention.actions.allowedmethods.sub;
+
+import org.apache.struts2.convention.actions.allowedmethods.PackageLevelAllowedMethodsAction;
+
+public class PackageLevelAllowedMethodsChildAction extends PackageLevelAllowedMethodsAction {
+
+ public String execute() { return null; }
+
+}
[30/33] struts git commit: Respects parent package flag when Strict
DMI is disabled
Posted by lu...@apache.org.
Respects parent package flag when Strict DMI is disabled
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/b8381057
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/b8381057
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/b8381057
Branch: refs/heads/master
Commit: b8381057190c3abebbc3a65c404fd5de5f2c6c52
Parents: e374311
Author: Lukasz Lenart <lu...@gmail.com>
Authored: Wed Sep 23 11:30:54 2015 +0200
Committer: Lukasz Lenart <lu...@gmail.com>
Committed: Wed Sep 23 11:30:54 2015 +0200
----------------------------------------------------------------------
.../convention/PackageBasedActionConfigBuilder.java | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/b8381057/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 0fc238c..c388ee9 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
@@ -921,9 +921,13 @@ public class PackageBasedActionConfigBuilder implements ActionConfigBuilder {
ActionConfig.Builder actionConfig = new ActionConfig.Builder(pkgCfg.getName(), actionName, className);
actionConfig.methodName(actionMethod);
- actionConfig.addAllowedMethod(actionMethod);
- actionConfig.addAllowedMethod(allowedMethods);
- actionConfig.addAllowedMethod(pkgCfg.getGlobalAllowedMethods());
+ if (pkgCfg.isStrictMethodInvocation()) {
+ actionConfig.addAllowedMethod(actionMethod);
+ actionConfig.addAllowedMethod(allowedMethods);
+ actionConfig.addAllowedMethod(pkgCfg.getGlobalAllowedMethods());
+ } else {
+ actionConfig.addAllowedMethod(ActionConfig.REGEX_WILDCARD);
+ }
if (LOG.isDebugEnabled()) {
LOG.debug("Creating action config for class [{}], name [{}] and package name [{}] in namespace [{}]",
[28/33] struts git commit: Inlines and simplifies
Posted by lu...@apache.org.
Inlines and simplifies
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/d511d282
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/d511d282
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/d511d282
Branch: refs/heads/master
Commit: d511d282045fa30aee3f994c7fdac78c600cc417
Parents: 2940761
Author: Lukasz Lenart <lu...@gmail.com>
Authored: Tue Sep 8 08:31:40 2015 +0200
Committer: Lukasz Lenart <lu...@gmail.com>
Committed: Tue Sep 8 08:31:40 2015 +0200
----------------------------------------------------------------------
.../xwork2/config/entities/PackageConfig.java | 10 +++-------
1 file changed, 3 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/d511d282/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java b/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
index 10286c4..e5d3ef4 100644
--- a/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
+++ b/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
@@ -614,19 +614,15 @@ public class PackageConfig extends Located implements Comparable, Serializable,
}
public PackageConfig build() {
- embalmTarget();
- PackageConfig result = target;
- target = new PackageConfig(result);
- return result;
- }
-
- protected void embalmTarget() {
target.actionConfigs = Collections.unmodifiableMap(target.actionConfigs);
target.globalResultConfigs = Collections.unmodifiableMap(target.globalResultConfigs);
target.interceptorConfigs = Collections.unmodifiableMap(target.interceptorConfigs);
target.resultTypeConfigs = Collections.unmodifiableMap(target.resultTypeConfigs);
target.globalExceptionMappingConfigs = Collections.unmodifiableList(target.globalExceptionMappingConfigs);
target.parents = Collections.unmodifiableList(target.parents);
+ PackageConfig result = target;
+ target = new PackageConfig(result);
+ return result;
}
@Override
[19/33] struts git commit: Uses factory method pattern
Posted by lu...@apache.org.
Uses factory method pattern
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/cb06d7d2
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/cb06d7d2
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/cb06d7d2
Branch: refs/heads/master
Commit: cb06d7d2580e37ab8aba2170c433c1674932c4de
Parents: e38d465
Author: Lukasz Lenart <lu...@gmail.com>
Authored: Fri Sep 4 09:08:32 2015 +0200
Committer: Lukasz Lenart <lu...@gmail.com>
Committed: Fri Sep 4 09:08:32 2015 +0200
----------------------------------------------------------------------
.../xwork2/config/entities/ActionConfig.java | 6 +--
.../xwork2/config/entities/AllowedMethods.java | 54 ++++++++++----------
2 files changed, 31 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/cb06d7d2/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 7c10c90..a821c93 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
@@ -63,7 +63,7 @@ public class ActionConfig extends Located implements Serializable {
results = new LinkedHashMap<>();
interceptors = new ArrayList<>();
exceptionMappings = new ArrayList<>();
- allowedMethods = new AllowedMethods(new HashSet<>(Collections.singletonList(DEFAULT_METHOD)));
+ allowedMethods = AllowedMethods.build(new HashSet<>(Collections.singletonList(DEFAULT_METHOD)));
}
/**
@@ -80,7 +80,7 @@ public class ActionConfig extends Located implements Serializable {
this.interceptors = new ArrayList<>(orig.interceptors);
this.results = new LinkedHashMap<>(orig.results);
this.exceptionMappings = new ArrayList<>(orig.exceptionMappings);
- this.allowedMethods = new AllowedMethods(orig.allowedMethods.list());
+ this.allowedMethods = AllowedMethods.build(orig.allowedMethods.list());
this.location = orig.location;
}
@@ -332,7 +332,7 @@ public class ActionConfig extends Located implements Serializable {
target.results = Collections.unmodifiableMap(target.results);
target.interceptors = Collections.unmodifiableList(target.interceptors);
target.exceptionMappings = Collections.unmodifiableList(target.exceptionMappings);
- target.allowedMethods = new AllowedMethods(allowedMethods);
+ target.allowedMethods = AllowedMethods.build(allowedMethods);
ActionConfig result = target;
target = new ActionConfig(target);
http://git-wip-us.apache.org/repos/asf/struts/blob/cb06d7d2/core/src/main/java/com/opensymphony/xwork2/config/entities/AllowedMethods.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/config/entities/AllowedMethods.java b/core/src/main/java/com/opensymphony/xwork2/config/entities/AllowedMethods.java
index f619d89..7582696 100644
--- a/core/src/main/java/com/opensymphony/xwork2/config/entities/AllowedMethods.java
+++ b/core/src/main/java/com/opensymphony/xwork2/config/entities/AllowedMethods.java
@@ -9,37 +9,39 @@ public class AllowedMethods {
private Set<AllowedMethod> allowedMethods;
- public AllowedMethods(Set<String> methods) {
+ public static AllowedMethods build(Set<String> methods) {
+
Set<AllowedMethod> allowedMethods = new HashSet<>();
for (String method : methods) {
- allowedMethods.add(build(method));
- }
- this.allowedMethods = Collections.unmodifiableSet(allowedMethods);
- }
-
- private AllowedMethod build(String method) {
- boolean isPattern = false;
- int len = method.length();
- StringBuilder ret = new StringBuilder();
- char c;
- for (int x = 0; x < len; x++) {
- c = method.charAt(x);
- if (x < len - 2 && c == '{' && '}' == method.charAt(x + 2)) {
- ret.append("(.*)");
- isPattern = true;
- x += 2;
+ boolean isPattern = false;
+ int len = method.length();
+ StringBuilder ret = new StringBuilder();
+ char c;
+ for (int x = 0; x < len; x++) {
+ c = method.charAt(x);
+ if (x < len - 2 && c == '{' && '}' == method.charAt(x + 2)) {
+ ret.append("(.*)");
+ isPattern = true;
+ x += 2;
+ } else {
+ ret.append(c);
+ }
+ }
+ if (isPattern && !method.startsWith("regex:")) {
+ allowedMethods.add(new PatternAllowedMethod(ret.toString(), method));
+ } else if (method.startsWith("regex:")) {
+ String pattern = method.substring(method.indexOf(":") + 1);
+ allowedMethods.add(new PatternAllowedMethod(pattern, method));
} else {
- ret.append(c);
+ allowedMethods.add(new LiteralAllowedMethod(ret.toString()));
}
}
- if (isPattern && !method.startsWith("regex:")) {
- return new PatternAllowedMethod(ret.toString(), method);
- } else if (method.startsWith("regex:")) {
- String pattern = method.substring(method.indexOf(":") + 1);
- return new PatternAllowedMethod(pattern, method);
- } else {
- return new LiteralAllowedMethod(ret.toString());
- }
+
+ return new AllowedMethods(allowedMethods);
+ }
+
+ private AllowedMethods(Set<AllowedMethod> methods) {
+ this.allowedMethods = Collections.unmodifiableSet(methods);
}
public boolean isAllowed(String method) {
[09/33] struts git commit: Adds support for wildcards
Posted by lu...@apache.org.
Adds support for wildcards
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/3b31c428
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/3b31c428
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/3b31c428
Branch: refs/heads/master
Commit: 3b31c428856766389ad6df4ba1edc3d60ecf5e24
Parents: c1928ad
Author: Lukasz Lenart <lu...@apache.org>
Authored: Mon Aug 31 18:36:29 2015 +0200
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Mon Aug 31 18:36:29 2015 +0200
----------------------------------------------------------------------
.../xwork2/config/entities/ActionConfig.java | 22 +--
.../xwork2/config/entities/AllowedMethods.java | 152 +++++++++++++++++++
2 files changed, 165 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/3b31c428/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 fd61ad9..5303e83 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
@@ -52,7 +52,7 @@ public class ActionConfig extends Located implements Serializable {
protected String methodName;
protected String packageName;
protected String name;
- protected Set<String> allowedMethods;
+ protected AllowedMethods allowedMethods;
protected ActionConfig(String packageName, String name, String className) {
this.packageName = packageName;
@@ -62,7 +62,7 @@ public class ActionConfig extends Located implements Serializable {
results = new LinkedHashMap<>();
interceptors = new ArrayList<>();
exceptionMappings = new ArrayList<>();
- allowedMethods = new HashSet<>(Collections.singletonList(DEFAULT_METHOD));
+ allowedMethods = new AllowedMethods(new HashSet<>(Collections.singletonList(DEFAULT_METHOD)));
}
/**
@@ -79,7 +79,7 @@ public class ActionConfig extends Located implements Serializable {
this.interceptors = new ArrayList<>(orig.interceptors);
this.results = new LinkedHashMap<>(orig.results);
this.exceptionMappings = new ArrayList<>(orig.exceptionMappings);
- this.allowedMethods = new HashSet<>(orig.allowedMethods);
+ this.allowedMethods = new AllowedMethods(orig.allowedMethods.list());
this.location = orig.location;
}
@@ -100,7 +100,7 @@ public class ActionConfig extends Located implements Serializable {
}
public Set<String> getAllowedMethods() {
- return allowedMethods;
+ return allowedMethods.list();
}
/**
@@ -128,7 +128,7 @@ public class ActionConfig extends Located implements Serializable {
}
public boolean isAllowedMethod(String method) {
- return method.equals(methodName != null ? methodName : DEFAULT_METHOD) || allowedMethods.contains(method);
+ return method.equals(methodName != null ? methodName : DEFAULT_METHOD) || allowedMethods.isAllowed(method);
}
@Override public boolean equals(Object o) {
@@ -210,14 +210,16 @@ public class ActionConfig extends Located implements Serializable {
public static class Builder implements InterceptorListHolder{
protected ActionConfig target;
+ protected Set<String> allowedMethods;
public Builder(ActionConfig toClone) {
target = new ActionConfig(toClone);
- addAllowedMethod(toClone.getAllowedMethods());
+ allowedMethods = toClone.getAllowedMethods();
}
public Builder(String packageName, String name, String className) {
target = new ActionConfig(packageName, name, className);
+ allowedMethods = new HashSet<>();
}
public Builder packageName(String name) {
@@ -308,12 +310,14 @@ public class ActionConfig extends Located implements Serializable {
}
public Builder addAllowedMethod(String methodName) {
- target.allowedMethods.add(methodName);
+ if (methodName != null) {
+ allowedMethods.add(methodName);
+ }
return this;
}
public Builder addAllowedMethod(Collection<String> methods) {
- target.allowedMethods.addAll(methods);
+ allowedMethods.addAll(methods);
return this;
}
@@ -327,7 +331,7 @@ public class ActionConfig extends Located implements Serializable {
target.results = Collections.unmodifiableMap(target.results);
target.interceptors = Collections.unmodifiableList(target.interceptors);
target.exceptionMappings = Collections.unmodifiableList(target.exceptionMappings);
- target.allowedMethods = Collections.unmodifiableSet(target.allowedMethods);
+ target.allowedMethods = new AllowedMethods(allowedMethods);
ActionConfig result = target;
target = new ActionConfig(target);
http://git-wip-us.apache.org/repos/asf/struts/blob/3b31c428/core/src/main/java/com/opensymphony/xwork2/config/entities/AllowedMethods.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/config/entities/AllowedMethods.java b/core/src/main/java/com/opensymphony/xwork2/config/entities/AllowedMethods.java
new file mode 100644
index 0000000..7a4fec1
--- /dev/null
+++ b/core/src/main/java/com/opensymphony/xwork2/config/entities/AllowedMethods.java
@@ -0,0 +1,152 @@
+package com.opensymphony.xwork2.config.entities;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.regex.Pattern;
+
+public class AllowedMethods {
+
+ private Set<AllowedMethod> allowedMethods;
+
+ public AllowedMethods(Set<String> methods) {
+ Set<AllowedMethod> allowedMethods = new HashSet<>();
+ for (String method : methods) {
+ allowedMethods.add(build(method));
+ }
+ this.allowedMethods = Collections.unmodifiableSet(allowedMethods);
+ }
+
+ private AllowedMethod build(String method) {
+ boolean isPattern = false;
+ int len = method.length();
+ StringBuilder ret = new StringBuilder();
+ char c;
+ for (int x = 0; x < len; x++) {
+ c = method.charAt(x);
+ if (x < len - 2 && c == '{' && '}' == method.charAt(x + 2)) {
+ ret.append("(.*)");
+ isPattern = true;
+ x += 2;
+ } else {
+ ret.append(c);
+ }
+ }
+ if (isPattern) {
+ return new PatternAllowedMethod(ret.toString(), method);
+ } else {
+ return new LiteralAllowedMethod(ret.toString());
+ }
+ }
+
+ public boolean isAllowed(String method) {
+ for (AllowedMethod allowedMethod : allowedMethods) {
+ if (allowedMethod.isAllowed(method)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public Set<String> list() {
+ Set<String> result = new HashSet<>();
+ for (AllowedMethod allowedMethod : allowedMethods) {
+ result.add(allowedMethod.original());
+ }
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ AllowedMethods that = (AllowedMethods) o;
+
+ return allowedMethods.equals(that.allowedMethods);
+ }
+
+ @Override
+ public int hashCode() {
+ return allowedMethods.hashCode();
+ }
+
+ private interface AllowedMethod {
+ boolean isAllowed(String methodName);
+
+ String original();
+ }
+
+ private static class PatternAllowedMethod implements AllowedMethod {
+
+ private final Pattern allowedMethodPattern;
+ private String original;
+
+ public PatternAllowedMethod(String pattern, String original) {
+ this.original = original;
+ allowedMethodPattern = Pattern.compile(pattern);
+ }
+
+ @Override
+ public boolean isAllowed(String methodName) {
+ return allowedMethodPattern.matcher(methodName).matches();
+ }
+
+ @Override
+ public String original() {
+ return original;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ PatternAllowedMethod that = (PatternAllowedMethod) o;
+
+ return original.equals(that.original);
+
+ }
+
+ @Override
+ public int hashCode() {
+ return original.hashCode();
+ }
+ }
+
+ private static class LiteralAllowedMethod implements AllowedMethod {
+
+ private String allowedMethod;
+
+ public LiteralAllowedMethod(String allowedMethod) {
+ this.allowedMethod = allowedMethod;
+ }
+
+ @Override
+ public boolean isAllowed(String methodName) {
+ return methodName.equals(allowedMethod);
+ }
+
+ @Override
+ public String original() {
+ return allowedMethod;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ LiteralAllowedMethod that = (LiteralAllowedMethod) o;
+
+ return allowedMethod.equals(that.allowedMethod);
+
+ }
+
+ @Override
+ public int hashCode() {
+ return allowedMethod.hashCode();
+ }
+ }
+
+}
[22/33] struts git commit: Drops unneeded if clause
Posted by lu...@apache.org.
Drops unneeded if clause
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/45af8765
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/45af8765
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/45af8765
Branch: refs/heads/master
Commit: 45af87655d1904bc55934512b5f0790dd04afa2d
Parents: 7db5e76
Author: Lukasz Lenart <lu...@gmail.com>
Authored: Fri Sep 4 11:35:07 2015 +0200
Committer: Lukasz Lenart <lu...@gmail.com>
Committed: Fri Sep 4 11:35:07 2015 +0200
----------------------------------------------------------------------
.../struts2/convention/PackageBasedActionConfigBuilder.java | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/45af8765/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 64a0e98..0fc238c 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
@@ -921,9 +921,7 @@ public class PackageBasedActionConfigBuilder implements ActionConfigBuilder {
ActionConfig.Builder actionConfig = new ActionConfig.Builder(pkgCfg.getName(), actionName, className);
actionConfig.methodName(actionMethod);
- if (!allowedMethods.contains(actionMethod)) {
- actionConfig.addAllowedMethod(actionMethod);
- }
+ actionConfig.addAllowedMethod(actionMethod);
actionConfig.addAllowedMethod(allowedMethods);
actionConfig.addAllowedMethod(pkgCfg.getGlobalAllowedMethods());
[02/33] struts git commit: Defines global-allowed-methods
Posted by lu...@apache.org.
Defines global-allowed-methods
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/ce884e92
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/ce884e92
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/ce884e92
Branch: refs/heads/master
Commit: ce884e92a15ef601b0e119963d3c521fa68d8bb1
Parents: 065b5b7
Author: Lukasz Lenart <lu...@apache.org>
Authored: Mon Aug 31 14:33:31 2015 +0200
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Mon Aug 31 14:33:31 2015 +0200
----------------------------------------------------------------------
.../xwork2/config/entities/ActionConfig.java | 1 +
.../providers/XmlConfigurationProvider.java | 48 ++++--
.../config/StrutsXmlConfigurationProvider.java | 1 +
core/src/main/resources/struts-2.5.dtd | 156 +++++++++++++++++++
core/src/main/resources/struts-default.xml | 6 +-
core/src/main/resources/xwork-2.5.dtd | 135 ++++++++++++++++
6 files changed, 336 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/ce884e92/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 b947ed9..fd61ad9 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
@@ -42,6 +42,7 @@ import java.util.*;
public class ActionConfig extends Located implements Serializable {
public static final String DEFAULT_METHOD = "execute";
+ public static final String WILDCARD = "*";
protected List<InterceptorMapping> interceptors; // a list of interceptorMapping Objects eg. List<InterceptorMapping>
protected Map<String,String> params;
http://git-wip-us.apache.org/repos/asf/struts/blob/ce884e92/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 12a71c7..449d254 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
@@ -15,12 +15,24 @@
*/
package com.opensymphony.xwork2.config.providers;
-import com.opensymphony.xwork2.*;
+import com.opensymphony.xwork2.Action;
+import com.opensymphony.xwork2.FileManager;
+import com.opensymphony.xwork2.FileManagerFactory;
+import com.opensymphony.xwork2.ObjectFactory;
+import com.opensymphony.xwork2.XWorkException;
import com.opensymphony.xwork2.config.Configuration;
import com.opensymphony.xwork2.config.ConfigurationException;
import com.opensymphony.xwork2.config.ConfigurationProvider;
import com.opensymphony.xwork2.config.ConfigurationUtil;
-import com.opensymphony.xwork2.config.entities.*;
+import com.opensymphony.xwork2.config.entities.ActionConfig;
+import com.opensymphony.xwork2.config.entities.ExceptionMappingConfig;
+import com.opensymphony.xwork2.config.entities.InterceptorConfig;
+import com.opensymphony.xwork2.config.entities.InterceptorMapping;
+import com.opensymphony.xwork2.config.entities.InterceptorStackConfig;
+import com.opensymphony.xwork2.config.entities.PackageConfig;
+import com.opensymphony.xwork2.config.entities.ResultConfig;
+import com.opensymphony.xwork2.config.entities.ResultTypeConfig;
+import com.opensymphony.xwork2.config.entities.UnknownHandlerConfig;
import com.opensymphony.xwork2.config.impl.LocatableFactory;
import com.opensymphony.xwork2.inject.Container;
import com.opensymphony.xwork2.inject.ContainerBuilder;
@@ -47,7 +59,17 @@ import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Modifier;
import java.net.URL;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Vector;
/**
@@ -90,6 +112,7 @@ public class XmlConfigurationProvider implements ConfigurationProvider {
this.errorIfMissing = errorIfMissing;
Map<String, String> mappings = new HashMap<>();
+ mappings.put("-//Apache Struts//XWork 2.5//EN", "xwork-2.5.dtd");
mappings.put("-//Apache Struts//XWork 2.3//EN", "xwork-2.3.dtd");
mappings.put("-//Apache Struts//XWork 2.1.3//EN", "xwork-2.1.3.dtd");
mappings.put("-//Apache Struts//XWork 2.1//EN", "xwork-2.1.dtd");
@@ -522,6 +545,8 @@ public class XmlConfigurationProvider implements ConfigurationProvider {
// load the global result list for this package
loadGlobalResults(newPackage, packageElement);
+ loadGlobalAllowedMethods(newPackage, packageElement);
+
// load the global exception handler list for this package
loadGobalExceptionMappings(newPackage, packageElement);
@@ -623,8 +648,6 @@ public class XmlConfigurationProvider implements ConfigurationProvider {
boolean isAbstract = Boolean.parseBoolean(abstractVal);
String name = StringUtils.defaultString(packageElement.getAttribute("name"));
String namespace = StringUtils.defaultString(packageElement.getAttribute("namespace"));
- String strictDMIVal = StringUtils.defaultString(packageElement.getAttribute("strict-method-invocation"));
- boolean strictDMI = Boolean.parseBoolean(strictDMIVal);
if (StringUtils.isNotEmpty(packageElement.getAttribute("externalReferenceResolver"))) {
throw new ConfigurationException("The 'externalReferenceResolver' attribute has been removed. Please use " +
@@ -634,7 +657,6 @@ public class XmlConfigurationProvider implements ConfigurationProvider {
PackageConfig.Builder cfg = new PackageConfig.Builder(name)
.namespace(namespace)
.isAbstract(isAbstract)
- .strictMethodInvocation(strictDMI)
.location(DomHelper.getLocationObject(packageElement));
if (StringUtils.isNotEmpty(StringUtils.defaultString(parent))) { // has parents, let's look it up
@@ -825,7 +847,7 @@ public class XmlConfigurationProvider implements ConfigurationProvider {
protected Set<String> buildAllowedMethods(Element element, PackageConfig.Builder packageContext) {
NodeList allowedMethodsEls = element.getElementsByTagName("allowed-methods");
- Set<String> allowedMethods = null;
+ Set<String> allowedMethods = packageContext.getGlobalAllowedMethods();
if (allowedMethodsEls.getLength() > 0) {
allowedMethods = new HashSet<>();
@@ -836,8 +858,6 @@ public class XmlConfigurationProvider implements ConfigurationProvider {
allowedMethods = TextParseUtil.commaDelimitedStringToSet(s);
}
}
- } else if (packageContext.isStrictMethodInvocation()) {
- allowedMethods = new HashSet<>();
}
return allowedMethods;
@@ -877,6 +897,16 @@ public class XmlConfigurationProvider implements ConfigurationProvider {
}
}
+ protected void loadGlobalAllowedMethods(PackageConfig.Builder packageContext, Element packageElement) {
+ NodeList globalAllowedMethods = packageElement.getElementsByTagName("global-allowed-methods");
+
+ if (globalAllowedMethods.getLength() > 0) {
+ Element globalAllowedMethodsElement = (Element) globalAllowedMethods.item(0);
+ Set<String> results = TextParseUtil.commaDelimitedStringToSet(globalAllowedMethodsElement.getAttribute("methods"));
+ packageContext.addGlobalAllowedMethods(results);
+ }
+ }
+
protected void loadDefaultClassRef(PackageConfig.Builder packageContext, Element element) {
NodeList defaultClassRefList = element.getElementsByTagName("default-class-ref");
if (defaultClassRefList.getLength() > 0) {
http://git-wip-us.apache.org/repos/asf/struts/blob/ce884e92/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java b/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java
index cca80b7..e39e475 100644
--- a/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java
+++ b/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java
@@ -75,6 +75,7 @@ public class StrutsXmlConfigurationProvider extends XmlConfigurationProvider {
dtdMappings.put("-//Apache Software Foundation//DTD Struts Configuration 2.1//EN", "struts-2.1.dtd");
dtdMappings.put("-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN", "struts-2.1.7.dtd");
dtdMappings.put("-//Apache Software Foundation//DTD Struts Configuration 2.3//EN", "struts-2.3.dtd");
+ dtdMappings.put("-//Apache Software Foundation//DTD Struts Configuration 2.5//EN", "struts-2.5.dtd");
setDtdMappings(dtdMappings);
File file = new File(filename);
if (file.getParent() != null) {
http://git-wip-us.apache.org/repos/asf/struts/blob/ce884e92/core/src/main/resources/struts-2.5.dtd
----------------------------------------------------------------------
diff --git a/core/src/main/resources/struts-2.5.dtd b/core/src/main/resources/struts-2.5.dtd
new file mode 100644
index 0000000..86afbc0
--- /dev/null
+++ b/core/src/main/resources/struts-2.5.dtd
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+ * $Id: struts-2.0.dtd 651946 2008-04-27 13:41:38Z apetrelli $
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<!-- START SNIPPET: strutsDtd -->
+
+<!--
+ Struts configuration DTD.
+ Use the following DOCTYPE
+
+ <!DOCTYPE struts PUBLIC
+ "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
+ "http://struts.apache.org/dtds/struts-2.5.dtd">
+-->
+
+<!ELEMENT struts ((package|include|bean|constant)*, unknown-handler-stack?)>
+<!ATTLIST struts
+ order CDATA #IMPLIED
+>
+
+<!ELEMENT package (result-types?, interceptors?, default-interceptor-ref?, default-action-ref?, default-class-ref?, global-results?, global-allowed-methods? global-exception-mappings?, action*)>
+<!ATTLIST package
+ name CDATA #REQUIRED
+ extends CDATA #IMPLIED
+ namespace CDATA #IMPLIED
+ abstract CDATA #IMPLIED
+ externalReferenceResolver NMTOKEN #IMPLIED
+>
+
+<!ELEMENT result-types (result-type+)>
+
+<!ELEMENT result-type (param*)>
+<!ATTLIST result-type
+ name CDATA #REQUIRED
+ class CDATA #REQUIRED
+ default (true|false) "false"
+>
+
+<!ELEMENT interceptors (interceptor|interceptor-stack)+>
+
+<!ELEMENT interceptor (param*)>
+<!ATTLIST interceptor
+ name CDATA #REQUIRED
+ class CDATA #REQUIRED
+>
+
+<!ELEMENT interceptor-stack (interceptor-ref*)>
+<!ATTLIST interceptor-stack
+ name CDATA #REQUIRED
+>
+
+<!ELEMENT interceptor-ref (param*)>
+<!ATTLIST interceptor-ref
+ name CDATA #REQUIRED
+>
+
+<!ELEMENT default-interceptor-ref (#PCDATA)>
+<!ATTLIST default-interceptor-ref
+ name CDATA #REQUIRED
+>
+
+<!ELEMENT default-action-ref (#PCDATA)>
+<!ATTLIST default-action-ref
+ name CDATA #REQUIRED
+>
+
+<!ELEMENT default-class-ref (#PCDATA)>
+<!ATTLIST default-class-ref
+ class CDATA #REQUIRED
+>
+
+<!ELEMENT global-results (result+)>
+
+<!ELEMENT global-allowed-methods (#PCDATA)>
+<!ATTLIST global-allowed-methods
+ methods CDATA #REQUIRED
+>
+
+<!ELEMENT global-exception-mappings (exception-mapping+)>
+
+<!ELEMENT action ((param|result|interceptor-ref|exception-mapping)*,allowed-methods?)>
+<!ATTLIST action
+ name CDATA #REQUIRED
+ class CDATA #IMPLIED
+ method CDATA #IMPLIED
+ converter CDATA #IMPLIED
+>
+
+<!ELEMENT param (#PCDATA)>
+<!ATTLIST param
+ name CDATA #REQUIRED
+>
+
+<!ELEMENT result (#PCDATA|param)*>
+<!ATTLIST result
+ name CDATA #IMPLIED
+ type CDATA #IMPLIED
+>
+
+<!ELEMENT exception-mapping (#PCDATA|param)*>
+<!ATTLIST exception-mapping
+ name CDATA #IMPLIED
+ exception CDATA #REQUIRED
+ result CDATA #REQUIRED
+>
+
+<!ELEMENT allowed-methods (#PCDATA)>
+
+<!ELEMENT include (#PCDATA)>
+<!ATTLIST include
+ file CDATA #REQUIRED
+>
+
+<!ELEMENT bean (#PCDATA)>
+<!ATTLIST bean
+ type CDATA #IMPLIED
+ name CDATA #IMPLIED
+ class CDATA #REQUIRED
+ scope CDATA #IMPLIED
+ static CDATA #IMPLIED
+ optional CDATA #IMPLIED
+>
+
+<!ELEMENT constant (#PCDATA)>
+<!ATTLIST constant
+ name CDATA #REQUIRED
+ value CDATA #REQUIRED
+>
+
+<!ELEMENT unknown-handler-stack (unknown-handler-ref*)>
+<!ELEMENT unknown-handler-ref (#PCDATA)>
+<!ATTLIST unknown-handler-ref
+ name CDATA #REQUIRED
+>
+
+<!-- END SNIPPET: strutsDtd -->
+
http://git-wip-us.apache.org/repos/asf/struts/blob/ce884e92/core/src/main/resources/struts-default.xml
----------------------------------------------------------------------
diff --git a/core/src/main/resources/struts-default.xml b/core/src/main/resources/struts-default.xml
index ca2a654..9fc1c21 100644
--- a/core/src/main/resources/struts-default.xml
+++ b/core/src/main/resources/struts-default.xml
@@ -33,8 +33,8 @@
and {@link com.opensymphony.xwork2.inject.Inject}
-->
<!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
- "http://struts.apache.org/dtds/struts-2.3.dtd">
+ "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
+ "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
@@ -358,6 +358,8 @@
</interceptors>
+ <global-allowed-methods methods="execute,input,back,cancel,browse"/>
+
<default-interceptor-ref name="defaultStack"/>
<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
http://git-wip-us.apache.org/repos/asf/struts/blob/ce884e92/core/src/main/resources/xwork-2.5.dtd
----------------------------------------------------------------------
diff --git a/core/src/main/resources/xwork-2.5.dtd b/core/src/main/resources/xwork-2.5.dtd
new file mode 100644
index 0000000..efbd765
--- /dev/null
+++ b/core/src/main/resources/xwork-2.5.dtd
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- START SNIPPET: xworkDtd -->
+
+<!--
+ XWork configuration DTD.
+ Use the following DOCTYPE
+
+ <!DOCTYPE xwork PUBLIC
+ "-//Apache Struts//XWork 2.5//EN"
+ "http://struts.apache.org/dtds/xwork-2.5.dtd">
+-->
+
+<!ELEMENT xwork ((package|include|bean|constant)*, unknown-handler-stack?)>
+<!ATTLIST xwork
+ order CDATA #IMPLIED
+>
+
+<!ELEMENT package (result-types?, interceptors?, default-interceptor-ref?, default-action-ref?, default-class-ref?, global-results?, global-allowed-methods?, global-exception-mappings?, action*)>
+<!ATTLIST package
+ name CDATA #REQUIRED
+ extends CDATA #IMPLIED
+ namespace CDATA #IMPLIED
+ abstract CDATA #IMPLIED
+ strict-method-invocation CDATA #IMPLIED
+>
+
+<!ELEMENT result-types (result-type+)>
+
+<!ELEMENT result-type (param*)>
+<!ATTLIST result-type
+ name CDATA #REQUIRED
+ class CDATA #REQUIRED
+ default (true|false) "false"
+>
+
+<!ELEMENT interceptors (interceptor|interceptor-stack)+>
+
+<!ELEMENT interceptor (param*)>
+<!ATTLIST interceptor
+ name CDATA #REQUIRED
+ class CDATA #REQUIRED
+>
+
+<!ELEMENT interceptor-stack (interceptor-ref*)>
+<!ATTLIST interceptor-stack
+ name CDATA #REQUIRED
+>
+
+<!ELEMENT interceptor-ref (param*)>
+<!ATTLIST interceptor-ref
+ name CDATA #REQUIRED
+>
+
+<!ELEMENT default-interceptor-ref (#PCDATA)>
+<!ATTLIST default-interceptor-ref
+ name CDATA #REQUIRED
+>
+
+<!ELEMENT default-action-ref (#PCDATA)>
+<!ATTLIST default-action-ref
+ name CDATA #REQUIRED
+>
+
+<!ELEMENT default-class-ref (#PCDATA)>
+<!ATTLIST default-class-ref
+ class CDATA #REQUIRED
+>
+
+<!ELEMENT global-results (result+)>
+
+<!ELEMENT global-allowed-methods (#PCDATA)>
+<!ATTLIST global-allowed-methods
+ methods CDATA #REQUIRED
+>
+
+<!ELEMENT global-exception-mappings (exception-mapping+)>
+
+<!ELEMENT action ((param|result|interceptor-ref|exception-mapping)*,allowed-methods?)>
+<!ATTLIST action
+ name CDATA #REQUIRED
+ class CDATA #IMPLIED
+ method CDATA #IMPLIED
+ converter CDATA #IMPLIED
+>
+
+<!ELEMENT param (#PCDATA)>
+<!ATTLIST param
+ name CDATA #REQUIRED
+>
+
+<!ELEMENT result (#PCDATA|param)*>
+<!ATTLIST result
+ name CDATA #IMPLIED
+ type CDATA #IMPLIED
+>
+
+<!ELEMENT exception-mapping (#PCDATA|param)*>
+<!ATTLIST exception-mapping
+ name CDATA #IMPLIED
+ exception CDATA #REQUIRED
+ result CDATA #REQUIRED
+>
+
+<!ELEMENT allowed-methods (#PCDATA)>
+
+<!ELEMENT include (#PCDATA)>
+<!ATTLIST include
+ file CDATA #REQUIRED
+>
+
+<!ELEMENT bean (#PCDATA)>
+<!ATTLIST bean
+ type CDATA #IMPLIED
+ name CDATA #IMPLIED
+ class CDATA #REQUIRED
+ scope CDATA #IMPLIED
+ static CDATA #IMPLIED
+ optional CDATA #IMPLIED
+>
+
+<!ELEMENT constant (#PCDATA)>
+<!ATTLIST constant
+ name CDATA #REQUIRED
+ value CDATA #REQUIRED
+>
+
+<!ELEMENT unknown-handler-stack (unknown-handler-ref*)>
+<!ELEMENT unknown-handler-ref (#PCDATA)>
+<!ATTLIST unknown-handler-ref
+ name CDATA #REQUIRED
+>
+
+<!-- END SNIPPET: xworkDtd -->
+
[27/33] struts git commit: Inherits parents' strict DMI
Posted by lu...@apache.org.
Inherits parents' strict DMI
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/29407614
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/29407614
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/29407614
Branch: refs/heads/master
Commit: 294076145f153e291eb7c38bb58a9b04bf3fb0e5
Parents: a61a369
Author: Lukasz Lenart <lu...@gmail.com>
Authored: Tue Sep 8 08:24:28 2015 +0200
Committer: Lukasz Lenart <lu...@gmail.com>
Committed: Tue Sep 8 08:24:28 2015 +0200
----------------------------------------------------------------------
.../xwork2/config/entities/PackageConfig.java | 102 +++++++++----------
...mlConfigurationProviderInterceptorsTest.java | 2 -
2 files changed, 46 insertions(+), 58 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/29407614/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java b/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
index aa53a12..10286c4 100644
--- a/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
+++ b/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
@@ -53,6 +53,7 @@ public class PackageConfig extends Located implements Comparable, Serializable,
protected String namespace = "";
protected boolean isAbstract = false;
protected boolean needsRefresh;
+ protected boolean strictMethodInvocation = true;
protected PackageConfig(String name) {
this.name = name;
@@ -82,6 +83,7 @@ public class PackageConfig extends Located implements Comparable, Serializable,
this.globalExceptionMappingConfigs = new ArrayList<>(orig.globalExceptionMappingConfigs);
this.parents = new ArrayList<>(orig.parents);
this.location = orig.location;
+ this.strictMethodInvocation = orig.strictMethodInvocation;
}
public boolean isAbstract() {
@@ -330,7 +332,6 @@ public class PackageConfig extends Located implements Comparable, Serializable,
return resultTypeConfigs;
}
-
public boolean isNeedsRefresh() {
return needsRefresh;
}
@@ -345,80 +346,64 @@ public class PackageConfig extends Located implements Comparable, Serializable,
return globalExceptionMappingConfigs;
}
+ public boolean isStrictMethodInvocation() {
+ return strictMethodInvocation;
+ }
+
@Override
public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
-
- if (!(o instanceof PackageConfig)) {
- return false;
- }
-
- final PackageConfig packageConfig = (PackageConfig) o;
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
- if (isAbstract != packageConfig.isAbstract) {
- return false;
- }
+ PackageConfig that = (PackageConfig) o;
- if ((actionConfigs != null) ? (!actionConfigs.equals(packageConfig.actionConfigs)) : (packageConfig.actionConfigs != null)) {
+ if (isAbstract != that.isAbstract) return false;
+ if (needsRefresh != that.needsRefresh) return false;
+ if (strictMethodInvocation != that.strictMethodInvocation) return false;
+ if (actionConfigs != null ? !actionConfigs.equals(that.actionConfigs) : that.actionConfigs != null)
return false;
- }
-
- if ((defaultResultType != null) ? (!defaultResultType.equals(packageConfig.defaultResultType)) : (packageConfig.defaultResultType != null)) {
+ if (globalResultConfigs != null ? !globalResultConfigs.equals(that.globalResultConfigs) : that.globalResultConfigs != null)
return false;
- }
-
- if ((defaultClassRef != null) ? (!defaultClassRef.equals(packageConfig.defaultClassRef)) : (packageConfig.defaultClassRef != null)) {
+ if (globalAllowedMethods != null ? !globalAllowedMethods.equals(that.globalAllowedMethods) : that.globalAllowedMethods != null)
return false;
- }
-
- if ((globalResultConfigs != null) ? (!globalResultConfigs.equals(packageConfig.globalResultConfigs)) : (packageConfig.globalResultConfigs != null)) {
+ if (interceptorConfigs != null ? !interceptorConfigs.equals(that.interceptorConfigs) : that.interceptorConfigs != null)
return false;
- }
-
- if ((interceptorConfigs != null) ? (!interceptorConfigs.equals(packageConfig.interceptorConfigs)) : (packageConfig.interceptorConfigs != null)) {
+ if (resultTypeConfigs != null ? !resultTypeConfigs.equals(that.resultTypeConfigs) : that.resultTypeConfigs != null)
return false;
- }
-
- if ((name != null) ? (!name.equals(packageConfig.name)) : (packageConfig.name != null)) {
+ if (globalExceptionMappingConfigs != null ? !globalExceptionMappingConfigs.equals(that.globalExceptionMappingConfigs) : that.globalExceptionMappingConfigs != null)
return false;
- }
-
- if ((namespace != null) ? (!namespace.equals(packageConfig.namespace)) : (packageConfig.namespace != null)) {
+ if (parents != null ? !parents.equals(that.parents) : that.parents != null) return false;
+ if (defaultInterceptorRef != null ? !defaultInterceptorRef.equals(that.defaultInterceptorRef) : that.defaultInterceptorRef != null)
return false;
- }
-
- if ((parents != null) ? (!parents.equals(packageConfig.parents)) : (packageConfig.parents != null)) {
+ if (defaultActionRef != null ? !defaultActionRef.equals(that.defaultActionRef) : that.defaultActionRef != null)
return false;
- }
-
- if ((resultTypeConfigs != null) ? (!resultTypeConfigs.equals(packageConfig.resultTypeConfigs)) : (packageConfig.resultTypeConfigs != null)) {
+ if (defaultResultType != null ? !defaultResultType.equals(that.defaultResultType) : that.defaultResultType != null)
return false;
- }
-
- if ((globalExceptionMappingConfigs != null) ? (!globalExceptionMappingConfigs.equals(packageConfig.globalExceptionMappingConfigs)) : (packageConfig.globalExceptionMappingConfigs != null)) {
+ if (defaultClassRef != null ? !defaultClassRef.equals(that.defaultClassRef) : that.defaultClassRef != null)
return false;
- }
+ if (!name.equals(that.name)) return false;
+ return !(namespace != null ? !namespace.equals(that.namespace) : that.namespace != null);
- return true;
}
@Override
public int hashCode() {
- int result;
- result = ((name != null) ? name.hashCode() : 0);
- result = (29 * result) + ((parents != null) ? parents.hashCode() : 0);
- result = (29 * result) + ((actionConfigs != null) ? actionConfigs.hashCode() : 0);
- result = (29 * result) + ((globalResultConfigs != null) ? globalResultConfigs.hashCode() : 0);
- result = (29 * result) + ((interceptorConfigs != null) ? interceptorConfigs.hashCode() : 0);
- result = (29 * result) + ((resultTypeConfigs != null) ? resultTypeConfigs.hashCode() : 0);
- result = (29 * result) + ((globalExceptionMappingConfigs != null) ? globalExceptionMappingConfigs.hashCode() : 0);
- result = (29 * result) + ((defaultResultType != null) ? defaultResultType.hashCode() : 0);
- result = (29 * result) + ((defaultClassRef != null) ? defaultClassRef.hashCode() : 0);
- result = (29 * result) + ((namespace != null) ? namespace.hashCode() : 0);
- result = (29 * result) + (isAbstract ? 1 : 0);
-
+ int result = actionConfigs != null ? actionConfigs.hashCode() : 0;
+ result = 31 * result + (globalResultConfigs != null ? globalResultConfigs.hashCode() : 0);
+ result = 31 * result + (globalAllowedMethods != null ? globalAllowedMethods.hashCode() : 0);
+ result = 31 * result + (interceptorConfigs != null ? interceptorConfigs.hashCode() : 0);
+ result = 31 * result + (resultTypeConfigs != null ? resultTypeConfigs.hashCode() : 0);
+ result = 31 * result + (globalExceptionMappingConfigs != null ? globalExceptionMappingConfigs.hashCode() : 0);
+ result = 31 * result + (parents != null ? parents.hashCode() : 0);
+ result = 31 * result + (defaultInterceptorRef != null ? defaultInterceptorRef.hashCode() : 0);
+ result = 31 * result + (defaultActionRef != null ? defaultActionRef.hashCode() : 0);
+ result = 31 * result + (defaultResultType != null ? defaultResultType.hashCode() : 0);
+ result = 31 * result + (defaultClassRef != null ? defaultClassRef.hashCode() : 0);
+ result = 31 * result + name.hashCode();
+ result = 31 * result + (namespace != null ? namespace.hashCode() : 0);
+ result = 31 * result + (isAbstract ? 1 : 0);
+ result = 31 * result + (needsRefresh ? 1 : 0);
+ result = 31 * result + (strictMethodInvocation ? 1 : 0);
return result;
}
@@ -620,6 +605,11 @@ public class PackageConfig extends Located implements Comparable, Serializable,
}
public boolean isStrictMethodInvocation() {
+ for (PackageConfig parent : target.parents) {
+ if (parent.isStrictMethodInvocation()) {
+ return true;
+ }
+ }
return strictDMI;
}
http://git-wip-us.apache.org/repos/asf/struts/blob/29407614/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderInterceptorsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderInterceptorsTest.java b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderInterceptorsTest.java
index b10eb49..cfd7f60 100644
--- a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderInterceptorsTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderInterceptorsTest.java
@@ -120,7 +120,6 @@ public class XmlConfigurationProviderInterceptorsTest extends ConfigurationTestB
// this should inherit
ActionConfig actionWithNoRef = new ActionConfig.Builder("", "ActionWithNoRef", SimpleAction.class.getName())
.addInterceptor(new InterceptorMapping("timer", objectFactory.buildInterceptor(timerInterceptor, new HashMap<String, String>())))
- .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.build();
interceptors = new ArrayList<>();
@@ -128,7 +127,6 @@ public class XmlConfigurationProviderInterceptorsTest extends ConfigurationTestB
ActionConfig anotherActionWithOwnRef = new ActionConfig.Builder("", "AnotherActionWithOwnRef", SimpleAction.class.getName())
.addInterceptor(new InterceptorMapping("logging", objectFactory.buildInterceptor(loggingInterceptor, new HashMap<String, String>())))
- .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.build();
RuntimeConfiguration runtimeConfig = configurationManager.getConfiguration().getRuntimeConfiguration();
[14/33] struts git commit: Implements required method
Posted by lu...@apache.org.
Implements required method
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/77691563
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/77691563
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/77691563
Branch: refs/heads/master
Commit: 77691563b9b8d2ad01c078a66d1ed207bf3611b3
Parents: 4c7a7dd
Author: Lukasz Lenart <lu...@apache.org>
Authored: Mon Aug 31 21:46:47 2015 +0200
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Mon Aug 31 21:46:47 2015 +0200
----------------------------------------------------------------------
.../struts2/convention/ConventionUnknownHandler.java | 10 ++++++++++
1 file changed, 10 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/77691563/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionUnknownHandler.java
----------------------------------------------------------------------
diff --git a/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionUnknownHandler.java b/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionUnknownHandler.java
index 85ce714..78c1956 100644
--- a/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionUnknownHandler.java
+++ b/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionUnknownHandler.java
@@ -28,6 +28,7 @@ import com.opensymphony.xwork2.config.providers.InterceptorBuilder;
import com.opensymphony.xwork2.inject.Container;
import com.opensymphony.xwork2.inject.Inject;
import com.opensymphony.xwork2.util.ClassLoaderUtil;
+import com.opensymphony.xwork2.util.TextParseUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -67,6 +68,8 @@ public class ConventionUnknownHandler implements UnknownHandler {
private ConventionsService conventionsService;
private String nameSeparator;
+ protected Set<String> allowedMethods = new HashSet<>();
+
/**
* Constructs the unknown handler.
*
@@ -102,6 +105,8 @@ public class ConventionUnknownHandler implements UnknownHandler {
}
this.redirectToSlash = Boolean.parseBoolean(redirectToSlash);
+
+ allowedMethods = TextParseUtil.commaDelimitedStringToSet("execute,input,back,cancel,browse");
}
public ActionConfig handleUnknownAction(String namespace, String actionName)
@@ -398,4 +403,9 @@ public class ConventionUnknownHandler implements UnknownHandler {
this.ext = ext;
}
}
+
+ @Override
+ public boolean isAllowedMethod(String allowedMethod, ActionConfig actionConfig) {
+ return false;
+ }
}
[33/33] struts git commit: WW-4540 Implements Strict DMI aka SMI
Posted by lu...@apache.org.
WW-4540 Implements Strict DMI aka SMI
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/b8826816
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/b8826816
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/b8826816
Branch: refs/heads/master
Commit: b8826816550422be78be1f7f86ef28f86ee3ca3c
Parents: 48ea26b fdb6dae
Author: Lukasz Lenart <lu...@apache.org>
Authored: Mon Sep 28 20:51:50 2015 +0200
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Mon Sep 28 20:51:50 2015 +0200
----------------------------------------------------------------------
.../opensymphony/xwork2/DefaultActionProxy.java | 9 +-
.../xwork2/DefaultUnknownHandlerManager.java | 1 +
.../xwork2/UnknownHandlerManager.java | 1 +
.../xwork2/config/entities/ActionConfig.java | 56 +++---
.../xwork2/config/entities/AllowedMethods.java | 172 +++++++++++++++++++
.../xwork2/config/entities/PackageConfig.java | 136 ++++++++-------
.../xwork2/config/impl/ActionConfigMatcher.java | 2 +-
.../providers/XmlConfigurationProvider.java | 85 +++++++--
.../config/StrutsXmlConfigurationProvider.java | 1 +
core/src/main/resources/struts-2.5.dtd | 153 +++++++++++++++++
core/src/main/resources/struts-default.xml | 9 +-
core/src/main/resources/xwork-2.5.dtd | 132 ++++++++++++++
.../xwork2/ActionInvocationTest.java | 17 +-
.../config/entities/AllowedMethodsTest.java | 55 ++++++
.../config/entities/PackageConfigTest.java | 62 ++++++-
.../XmlConfigurationProviderActionsTest.java | 8 +-
...ConfigurationProviderAllowedMethodsTest.java | 4 +-
...figurationProviderExceptionMappingsTest.java | 6 +-
.../struts2/TestConfigurationProvider.java | 1 +
.../providers/xwork-test-allowed-methods.xml | 2 +-
core/src/test/resources/xwork-sample.xml | 6 +-
.../convention/ConventionUnknownHandler.java | 6 +
.../PackageBasedActionConfigBuilder.java | 32 +++-
.../convention/annotation/AllowedMethods.java | 30 ++++
.../PackageBasedActionConfigBuilderTest.java | 60 ++++++-
.../ClassLevelAllowedMethodsAction.java | 10 ++
.../PackageLevelAllowedMethodsAction.java | 7 +
.../actions/allowedmethods/package-info.java | 23 +++
.../PackageLevelAllowedMethodsChildAction.java | 9 +
29 files changed, 944 insertions(+), 151 deletions(-)
----------------------------------------------------------------------
[10/33] struts git commit: Simplifies implementation
Posted by lu...@apache.org.
Simplifies implementation
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/18553046
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/18553046
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/18553046
Branch: refs/heads/master
Commit: 185530464b838b3aac9681b5ff5b16401ccef56d
Parents: 3b31c42
Author: Lukasz Lenart <lu...@apache.org>
Authored: Mon Aug 31 18:36:41 2015 +0200
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Mon Aug 31 18:36:41 2015 +0200
----------------------------------------------------------------------
.../config/providers/XmlConfigurationProvider.java | 16 +++++++++++-----
core/src/main/resources/struts-2.5.dtd | 3 ---
core/src/main/resources/struts-default.xml | 2 +-
core/src/main/resources/xwork-2.5.dtd | 3 ---
core/src/test/resources/xwork-sample.xml | 2 +-
5 files changed, 13 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/18553046/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 fd9f92a..0d64ad7 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
@@ -893,12 +893,18 @@ public class XmlConfigurationProvider implements ConfigurationProvider {
}
protected void loadGlobalAllowedMethods(PackageConfig.Builder packageContext, Element packageElement) {
- NodeList globalAllowedMethods = packageElement.getElementsByTagName("global-allowed-methods");
+ NodeList globalAllowedMethodsElms = packageElement.getElementsByTagName("global-allowed-methods");
- if (globalAllowedMethods.getLength() > 0) {
- Element globalAllowedMethodsElement = (Element) globalAllowedMethods.item(0);
- Set<String> results = TextParseUtil.commaDelimitedStringToSet(globalAllowedMethodsElement.getAttribute("methods"));
- packageContext.addGlobalAllowedMethods(results);
+ if (globalAllowedMethodsElms.getLength() > 0) {
+ Set<String> globalAllowedMethods = new HashSet<>();
+ Node n = globalAllowedMethodsElms.item(0).getFirstChild();
+ if (n != null) {
+ String s = n.getNodeValue().trim();
+ if (s.length() > 0) {
+ globalAllowedMethods = TextParseUtil.commaDelimitedStringToSet(s);
+ }
+ }
+ packageContext.addGlobalAllowedMethods(globalAllowedMethods);
}
}
http://git-wip-us.apache.org/repos/asf/struts/blob/18553046/core/src/main/resources/struts-2.5.dtd
----------------------------------------------------------------------
diff --git a/core/src/main/resources/struts-2.5.dtd b/core/src/main/resources/struts-2.5.dtd
index 25ca800..6591ddb 100644
--- a/core/src/main/resources/struts-2.5.dtd
+++ b/core/src/main/resources/struts-2.5.dtd
@@ -90,9 +90,6 @@
<!ELEMENT global-results (result+)>
<!ELEMENT global-allowed-methods (#PCDATA)>
-<!ATTLIST global-allowed-methods
- methods CDATA #REQUIRED
->
<!ELEMENT global-exception-mappings (exception-mapping+)>
http://git-wip-us.apache.org/repos/asf/struts/blob/18553046/core/src/main/resources/struts-default.xml
----------------------------------------------------------------------
diff --git a/core/src/main/resources/struts-default.xml b/core/src/main/resources/struts-default.xml
index 9fc1c21..d7a0ee0 100644
--- a/core/src/main/resources/struts-default.xml
+++ b/core/src/main/resources/struts-default.xml
@@ -358,7 +358,7 @@
</interceptors>
- <global-allowed-methods methods="execute,input,back,cancel,browse"/>
+ <global-allowed-methods>execute,input,back,cancel,browse</global-allowed-methods>
<default-interceptor-ref name="defaultStack"/>
http://git-wip-us.apache.org/repos/asf/struts/blob/18553046/core/src/main/resources/xwork-2.5.dtd
----------------------------------------------------------------------
diff --git a/core/src/main/resources/xwork-2.5.dtd b/core/src/main/resources/xwork-2.5.dtd
index 4d3e1ca..197d0c1 100644
--- a/core/src/main/resources/xwork-2.5.dtd
+++ b/core/src/main/resources/xwork-2.5.dtd
@@ -69,9 +69,6 @@
<!ELEMENT global-results (result+)>
<!ELEMENT global-allowed-methods (#PCDATA)>
-<!ATTLIST global-allowed-methods
- methods CDATA #REQUIRED
->
<!ELEMENT global-exception-mappings (exception-mapping+)>
http://git-wip-us.apache.org/repos/asf/struts/blob/18553046/core/src/test/resources/xwork-sample.xml
----------------------------------------------------------------------
diff --git a/core/src/test/resources/xwork-sample.xml b/core/src/test/resources/xwork-sample.xml
index cd2ddcb..7f5e547 100644
--- a/core/src/test/resources/xwork-sample.xml
+++ b/core/src/test/resources/xwork-sample.xml
@@ -14,7 +14,7 @@
</result>
</global-results>
- <global-allowed-methods methods="execute,input,back,cancel,browse"/>
+ <global-allowed-methods>execute,input,back,cancel,browse</global-allowed-methods>
<action name="Foo" class="com.opensymphony.xwork2.SimpleAction">
<param name="foo">17</param>
[03/33] struts git commit: Uses global-allowed-methods config para
Posted by lu...@apache.org.
Uses global-allowed-methods config para
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/fd22e3a1
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/fd22e3a1
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/fd22e3a1
Branch: refs/heads/master
Commit: fd22e3a16c88ef0528c1e26e0d6bdfdf1c02c755
Parents: ce884e9
Author: Lukasz Lenart <lu...@apache.org>
Authored: Mon Aug 31 14:35:16 2015 +0200
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Mon Aug 31 14:35:16 2015 +0200
----------------------------------------------------------------------
.../xwork2/config/entities/PackageConfig.java | 22 +++++++++++---------
1 file changed, 12 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/fd22e3a1/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java b/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
index c9ef12d..19ce36f 100644
--- a/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
+++ b/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
@@ -40,6 +40,7 @@ public class PackageConfig extends Located implements Comparable, Serializable,
protected Map<String, ActionConfig> actionConfigs;
protected Map<String, ResultConfig> globalResultConfigs;
+ protected Set<String> globalAllowedMethods;
protected Map<String, Object> interceptorConfigs;
protected Map<String, ResultTypeConfig> resultTypeConfigs;
protected List<ExceptionMappingConfig> globalExceptionMappingConfigs;
@@ -57,6 +58,7 @@ public class PackageConfig extends Located implements Comparable, Serializable,
this.name = name;
actionConfigs = new LinkedHashMap<>();
globalResultConfigs = new LinkedHashMap<>();
+ globalAllowedMethods = new HashSet<>();
interceptorConfigs = new LinkedHashMap<>();
resultTypeConfigs = new LinkedHashMap<>();
globalExceptionMappingConfigs = new ArrayList<>();
@@ -74,6 +76,7 @@ public class PackageConfig extends Located implements Comparable, Serializable,
this.needsRefresh = orig.needsRefresh;
this.actionConfigs = new LinkedHashMap<>(orig.actionConfigs);
this.globalResultConfigs = new LinkedHashMap<>(orig.globalResultConfigs);
+ this.globalAllowedMethods = new LinkedHashSet<>(orig.globalAllowedMethods);
this.interceptorConfigs = new LinkedHashMap<>(orig.interceptorConfigs);
this.resultTypeConfigs = new LinkedHashMap<>(orig.resultTypeConfigs);
this.globalExceptionMappingConfigs = new ArrayList<>(orig.globalExceptionMappingConfigs);
@@ -445,7 +448,6 @@ public class PackageConfig extends Located implements Comparable, Serializable,
public static class Builder implements InterceptorLocator {
protected PackageConfig target;
- private boolean strictDMI;
public Builder(String name) {
target = new PackageConfig(name);
@@ -528,6 +530,15 @@ public class PackageConfig extends Located implements Comparable, Serializable,
return this;
}
+ public Set<String> getGlobalAllowedMethods() {
+ return target.globalAllowedMethods;
+ }
+
+ public Builder addGlobalAllowedMethods(Set<String> allowedMethods) {
+ target.globalAllowedMethods.addAll(allowedMethods);
+ return this;
+ }
+
public Builder addExceptionMappingConfig(ExceptionMappingConfig exceptionMappingConfig) {
target.globalExceptionMappingConfigs.add(exceptionMappingConfig);
return this;
@@ -591,15 +602,6 @@ public class PackageConfig extends Located implements Comparable, Serializable,
return target.getAllInterceptorConfigs().get(name);
}
- public Builder strictMethodInvocation(boolean strict) {
- strictDMI = strict;
- return this;
- }
-
- public boolean isStrictMethodInvocation() {
- return strictDMI;
- }
-
public PackageConfig build() {
embalmTarget();
PackageConfig result = target;
[17/33] struts git commit: Puts back option to disable strict DMI
Posted by lu...@apache.org.
Puts back option to disable strict DMI
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/e4fc8528
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/e4fc8528
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/e4fc8528
Branch: refs/heads/master
Commit: e4fc8528b874d5d4d454ec8d8976b696a8375f82
Parents: ab5fb27
Author: Lukasz Lenart <lu...@gmail.com>
Authored: Fri Sep 4 08:55:14 2015 +0200
Committer: Lukasz Lenart <lu...@gmail.com>
Committed: Fri Sep 4 08:55:14 2015 +0200
----------------------------------------------------------------------
.../xwork2/config/entities/PackageConfig.java | 10 ++++++++++
.../xwork2/config/providers/XmlConfigurationProvider.java | 3 +++
core/src/main/resources/struts-2.5.dtd | 1 +
core/src/main/resources/xwork-2.5.dtd | 1 +
4 files changed, 15 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/e4fc8528/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java b/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
index 093985c..aa53a12 100644
--- a/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
+++ b/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
@@ -448,6 +448,7 @@ public class PackageConfig extends Located implements Comparable, Serializable,
public static class Builder implements InterceptorLocator {
protected PackageConfig target;
+ private boolean strictDMI;
public Builder(String name) {
target = new PackageConfig(name);
@@ -613,6 +614,15 @@ public class PackageConfig extends Located implements Comparable, Serializable,
return target.getAllInterceptorConfigs().get(name);
}
+ public Builder strictMethodInvocation(boolean strict) {
+ strictDMI = strict;
+ return this;
+ }
+
+ public boolean isStrictMethodInvocation() {
+ return strictDMI;
+ }
+
public PackageConfig build() {
embalmTarget();
PackageConfig result = target;
http://git-wip-us.apache.org/repos/asf/struts/blob/e4fc8528/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 0302a68..3009dcb 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
@@ -649,9 +649,12 @@ public class XmlConfigurationProvider implements ConfigurationProvider {
String name = StringUtils.defaultString(packageElement.getAttribute("name"));
String namespace = StringUtils.defaultString(packageElement.getAttribute("namespace"));
+ boolean strictDMI = Boolean.parseBoolean(packageElement.getAttribute("strict-method-invocation"));
+
PackageConfig.Builder cfg = new PackageConfig.Builder(name)
.namespace(namespace)
.isAbstract(isAbstract)
+ .strictMethodInvocation(strictDMI)
.location(DomHelper.getLocationObject(packageElement));
if (StringUtils.isNotEmpty(StringUtils.defaultString(parent))) { // has parents, let's look it up
http://git-wip-us.apache.org/repos/asf/struts/blob/e4fc8528/core/src/main/resources/struts-2.5.dtd
----------------------------------------------------------------------
diff --git a/core/src/main/resources/struts-2.5.dtd b/core/src/main/resources/struts-2.5.dtd
index 0845eee..b426d29 100644
--- a/core/src/main/resources/struts-2.5.dtd
+++ b/core/src/main/resources/struts-2.5.dtd
@@ -43,6 +43,7 @@
extends CDATA #IMPLIED
namespace CDATA #IMPLIED
abstract CDATA #IMPLIED
+ strict-method-invocation (true|false) "true"
>
<!ELEMENT result-types (result-type+)>
http://git-wip-us.apache.org/repos/asf/struts/blob/e4fc8528/core/src/main/resources/xwork-2.5.dtd
----------------------------------------------------------------------
diff --git a/core/src/main/resources/xwork-2.5.dtd b/core/src/main/resources/xwork-2.5.dtd
index 197d0c1..31c1167 100644
--- a/core/src/main/resources/xwork-2.5.dtd
+++ b/core/src/main/resources/xwork-2.5.dtd
@@ -22,6 +22,7 @@
extends CDATA #IMPLIED
namespace CDATA #IMPLIED
abstract CDATA #IMPLIED
+ strict-method-invocation (true|false) "true"
>
<!ELEMENT result-types (result-type+)>
[26/33] struts git commit: Drops support for
handleUnknownAllowedMethod as it was added to satisfy test
Posted by lu...@apache.org.
Drops support for handleUnknownAllowedMethod as it was added to satisfy test
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/a61a3692
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/a61a3692
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/a61a3692
Branch: refs/heads/master
Commit: a61a3692241d0da833139b9e4eab10a4a3e496aa
Parents: e9e6ae9
Author: Lukasz Lenart <lu...@gmail.com>
Authored: Sun Sep 6 10:36:51 2015 +0200
Committer: Lukasz Lenart <lu...@gmail.com>
Committed: Sun Sep 6 10:36:51 2015 +0200
----------------------------------------------------------------------
.../java/com/opensymphony/xwork2/DefaultActionProxy.java | 4 +---
.../opensymphony/xwork2/DefaultUnknownHandlerManager.java | 9 ---------
.../main/java/com/opensymphony/xwork2/UnknownHandler.java | 10 ----------
.../com/opensymphony/xwork2/UnknownHandlerManager.java | 2 --
.../com/opensymphony/xwork2/ActionInvocationTest.java | 7 +++----
.../xwork2/config/providers/SomeUnknownHandler.java | 5 -----
.../struts2/convention/ConventionUnknownHandler.java | 4 ----
7 files changed, 4 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/a61a3692/core/src/main/java/com/opensymphony/xwork2/DefaultActionProxy.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/DefaultActionProxy.java b/core/src/main/java/com/opensymphony/xwork2/DefaultActionProxy.java
index 6b8749e..72c6e9e 100644
--- a/core/src/main/java/com/opensymphony/xwork2/DefaultActionProxy.java
+++ b/core/src/main/java/com/opensymphony/xwork2/DefaultActionProxy.java
@@ -194,9 +194,7 @@ public class DefaultActionProxy implements ActionProxy, Serializable {
resolveMethod();
- if (config.isAllowedMethod(method) ||
- (unknownHandlerManager.hasUnknownHandlers() && unknownHandlerManager.isAllowedMethod(method, config))
- ) {
+ if (config.isAllowedMethod(method)) {
invocation.init(this);
} else {
throw new ConfigurationException("This method: " + method + " for action " + actionName + " is not allowed!");
http://git-wip-us.apache.org/repos/asf/struts/blob/a61a3692/core/src/main/java/com/opensymphony/xwork2/DefaultUnknownHandlerManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/DefaultUnknownHandlerManager.java b/core/src/main/java/com/opensymphony/xwork2/DefaultUnknownHandlerManager.java
index 04ac430..46af876 100644
--- a/core/src/main/java/com/opensymphony/xwork2/DefaultUnknownHandlerManager.java
+++ b/core/src/main/java/com/opensymphony/xwork2/DefaultUnknownHandlerManager.java
@@ -146,13 +146,4 @@ public class DefaultUnknownHandlerManager implements UnknownHandlerManager {
return unknownHandlers;
}
- @Override
- public boolean isAllowedMethod(String allowedMethod, ActionConfig config) {
- for (UnknownHandler unknownHandler : unknownHandlers) {
- if (unknownHandler.isAllowedMethod(allowedMethod, config)) {
- return true;
- }
- }
- return false;
- }
}
http://git-wip-us.apache.org/repos/asf/struts/blob/a61a3692/core/src/main/java/com/opensymphony/xwork2/UnknownHandler.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/UnknownHandler.java b/core/src/main/java/com/opensymphony/xwork2/UnknownHandler.java
index 1e6f5aa..51556d6 100644
--- a/core/src/main/java/com/opensymphony/xwork2/UnknownHandler.java
+++ b/core/src/main/java/com/opensymphony/xwork2/UnknownHandler.java
@@ -60,14 +60,4 @@ public interface UnknownHandler {
*/
Object handleUnknownActionMethod(Object action, String methodName);
- /**
- * Handles the case when an action method is unknown and cannot be validated if it is allowed to be executed.
- *
- * @since 2.5
- * @param allowedMethod The method's name
- * @param actionConfig The config of actions
- * @return true if allowedMethod can be executed, false otherwise
- */
- boolean isAllowedMethod(String allowedMethod, ActionConfig actionConfig);
-
}
http://git-wip-us.apache.org/repos/asf/struts/blob/a61a3692/core/src/main/java/com/opensymphony/xwork2/UnknownHandlerManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/UnknownHandlerManager.java b/core/src/main/java/com/opensymphony/xwork2/UnknownHandlerManager.java
index caf63b3..d8cce9f 100644
--- a/core/src/main/java/com/opensymphony/xwork2/UnknownHandlerManager.java
+++ b/core/src/main/java/com/opensymphony/xwork2/UnknownHandlerManager.java
@@ -44,6 +44,4 @@ public interface UnknownHandlerManager {
List<UnknownHandler> getUnknownHandlers();
- boolean isAllowedMethod(String allowedMethod, ActionConfig actionConfig);
-
}
http://git-wip-us.apache.org/repos/asf/struts/blob/a61a3692/core/src/test/java/com/opensymphony/xwork2/ActionInvocationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/com/opensymphony/xwork2/ActionInvocationTest.java b/core/src/test/java/com/opensymphony/xwork2/ActionInvocationTest.java
index 37aa2a5..a1182cc 100644
--- a/core/src/test/java/com/opensymphony/xwork2/ActionInvocationTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/ActionInvocationTest.java
@@ -48,7 +48,9 @@ public class ActionInvocationTest extends XWorkTestCase {
UnknownHandler unknownHandler = new UnknownHandler() {
public ActionConfig handleUnknownAction(String namespace, String actionName) throws XWorkException {
- return new ActionConfig.Builder("test", actionName, ActionSupport.class.getName()).build();
+ return new ActionConfig.Builder("test", actionName, ActionSupport.class.getName())
+ .addAllowedMethod("unknownmethod")
+ .build();
}
public Result handleUnknownResult(ActionContext actionContext, String actionName, ActionConfig actionConfig, String resultCode) throws XWorkException {
return new MockResult();
@@ -60,9 +62,6 @@ public class ActionInvocationTest extends XWorkTestCase {
return null;
}
}
- public boolean isAllowedMethod(String allowedMethod, ActionConfig actionConfig) {
- return "unknownmethod".equals(allowedMethod);
- }
};
UnknownHandlerManagerMock uhm = new UnknownHandlerManagerMock();
http://git-wip-us.apache.org/repos/asf/struts/blob/a61a3692/core/src/test/java/com/opensymphony/xwork2/config/providers/SomeUnknownHandler.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/com/opensymphony/xwork2/config/providers/SomeUnknownHandler.java b/core/src/test/java/com/opensymphony/xwork2/config/providers/SomeUnknownHandler.java
index 5e922e0..312f4c9 100644
--- a/core/src/test/java/com/opensymphony/xwork2/config/providers/SomeUnknownHandler.java
+++ b/core/src/test/java/com/opensymphony/xwork2/config/providers/SomeUnknownHandler.java
@@ -38,11 +38,6 @@ public class SomeUnknownHandler implements UnknownHandler{
return null;
}
- @Override
- public boolean isAllowedMethod(String allowedMethod, ActionConfig actionConfig) {
- return false;
- }
-
public void setActionConfig(ActionConfig actionConfig) {
this.actionConfig = actionConfig;
}
http://git-wip-us.apache.org/repos/asf/struts/blob/a61a3692/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionUnknownHandler.java
----------------------------------------------------------------------
diff --git a/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionUnknownHandler.java b/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionUnknownHandler.java
index 78c1956..b7c7acf 100644
--- a/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionUnknownHandler.java
+++ b/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionUnknownHandler.java
@@ -404,8 +404,4 @@ public class ConventionUnknownHandler implements UnknownHandler {
}
}
- @Override
- public boolean isAllowedMethod(String allowedMethod, ActionConfig actionConfig) {
- return false;
- }
}
[23/33] struts git commit: Adds more strict DMI logic
Posted by lu...@apache.org.
Adds more strict DMI logic
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/0aaade64
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/0aaade64
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/0aaade64
Branch: refs/heads/master
Commit: 0aaade64cd332a7a5f45ae5068b8f7be1abb3817
Parents: 45af876
Author: Lukasz Lenart <lu...@gmail.com>
Authored: Fri Sep 4 11:35:23 2015 +0200
Committer: Lukasz Lenart <lu...@gmail.com>
Committed: Fri Sep 4 11:35:23 2015 +0200
----------------------------------------------------------------------
.../xwork2/config/providers/XmlConfigurationProvider.java | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/0aaade64/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 950d4a1..7d2e065 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
@@ -846,7 +846,8 @@ public class XmlConfigurationProvider implements ConfigurationProvider {
NodeList allowedMethodsEls = element.getElementsByTagName("allowed-methods");
Set<String> allowedMethods;
- if (packageContext.isStrictMethodInvocation()) {
+ if (allowedMethodsEls.getLength() > 0) {
+ // user defined 'allowed-methods' so used them whatever Strict DMI was enabled or not
allowedMethods = packageContext.getGlobalAllowedMethods();
if (allowedMethodsEls.getLength() > 0) {
@@ -859,7 +860,11 @@ public class XmlConfigurationProvider implements ConfigurationProvider {
}
}
}
+ } else if (packageContext.isStrictMethodInvocation()) {
+ // user enabled Strict DMI but didn't defined action specific 'allowed-methods' so we use 'global-allowed-methods' only
+ allowedMethods = packageContext.getGlobalAllowedMethods();
} else {
+ // Strict DMI is disabled to any method can be called
allowedMethods = new HashSet<>();
allowedMethods.add(ActionConfig.REGEX_WILDCARD);
}
[07/33] struts git commit: Fixes tests
Posted by lu...@apache.org.
Fixes tests
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/c3f4457b
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/c3f4457b
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/c3f4457b
Branch: refs/heads/master
Commit: c3f4457b8b8ad6bd0e89646d825f2ef5f9f91118
Parents: 4565993
Author: Lukasz Lenart <lu...@apache.org>
Authored: Mon Aug 31 14:43:31 2015 +0200
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Mon Aug 31 14:43:31 2015 +0200
----------------------------------------------------------------------
.../opensymphony/xwork2/DefaultActionProxy.java | 11 ++++++-----
.../opensymphony/xwork2/ActionInvocationTest.java | 18 ++++++++++++++----
.../config/providers/SomeUnknownHandler.java | 5 +++++
core/src/test/resources/xwork-sample.xml | 6 ++++--
4 files changed, 29 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/c3f4457b/core/src/main/java/com/opensymphony/xwork2/DefaultActionProxy.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/DefaultActionProxy.java b/core/src/main/java/com/opensymphony/xwork2/DefaultActionProxy.java
index d1bfd71..6b8749e 100644
--- a/core/src/main/java/com/opensymphony/xwork2/DefaultActionProxy.java
+++ b/core/src/main/java/com/opensymphony/xwork2/DefaultActionProxy.java
@@ -194,12 +194,13 @@ public class DefaultActionProxy implements ActionProxy, Serializable {
resolveMethod();
- if (!config.isAllowedMethod(method)) {
- throw new ConfigurationException("Invalid method: " + method + " for action " + actionName);
+ if (config.isAllowedMethod(method) ||
+ (unknownHandlerManager.hasUnknownHandlers() && unknownHandlerManager.isAllowedMethod(method, config))
+ ) {
+ invocation.init(this);
+ } else {
+ throw new ConfigurationException("This method: " + method + " for action " + actionName + " is not allowed!");
}
-
- invocation.init(this);
-
} finally {
UtilTimerStack.pop(profileKey);
}
http://git-wip-us.apache.org/repos/asf/struts/blob/c3f4457b/core/src/test/java/com/opensymphony/xwork2/ActionInvocationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/com/opensymphony/xwork2/ActionInvocationTest.java b/core/src/test/java/com/opensymphony/xwork2/ActionInvocationTest.java
index 05c09b2..37aa2a5 100644
--- a/core/src/test/java/com/opensymphony/xwork2/ActionInvocationTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/ActionInvocationTest.java
@@ -17,6 +17,7 @@ package com.opensymphony.xwork2;
import com.opensymphony.xwork2.config.entities.ActionConfig;
import com.opensymphony.xwork2.config.providers.XmlConfigurationProvider;
+import com.opensymphony.xwork2.mock.MockResult;
import java.util.HashMap;
@@ -45,12 +46,12 @@ public class ActionInvocationTest extends XWorkTestCase {
public void testCommandInvocationUnknownHandler() throws Exception {
- DefaultActionProxy baseActionProxy = (DefaultActionProxy) actionProxyFactory.createActionProxy(
- "baz", "unknownMethodTest", "unknownmethod", null);
UnknownHandler unknownHandler = new UnknownHandler() {
- public ActionConfig handleUnknownAction(String namespace, String actionName) throws XWorkException { return null;}
+ public ActionConfig handleUnknownAction(String namespace, String actionName) throws XWorkException {
+ return new ActionConfig.Builder("test", actionName, ActionSupport.class.getName()).build();
+ }
public Result handleUnknownResult(ActionContext actionContext, String actionName, ActionConfig actionConfig, String resultCode) throws XWorkException {
- return null;
+ return new MockResult();
}
public Object handleUnknownActionMethod(Object action, String methodName) {
if (methodName.equals("unknownmethod")) {
@@ -59,10 +60,19 @@ public class ActionInvocationTest extends XWorkTestCase {
return null;
}
}
+ public boolean isAllowedMethod(String allowedMethod, ActionConfig actionConfig) {
+ return "unknownmethod".equals(allowedMethod);
+ }
};
UnknownHandlerManagerMock uhm = new UnknownHandlerManagerMock();
uhm.addUnknownHandler(unknownHandler);
+
+ loadButAdd(UnknownHandlerManager.class, uhm);
+
+ DefaultActionProxy baseActionProxy = (DefaultActionProxy) actionProxyFactory.createActionProxy(
+ "baz", "unknownMethodTest", "unknownmethod", null);
+
((DefaultActionInvocation)baseActionProxy.getInvocation()).setUnknownHandlerManager(uhm);
assertEquals("found", baseActionProxy.execute());
http://git-wip-us.apache.org/repos/asf/struts/blob/c3f4457b/core/src/test/java/com/opensymphony/xwork2/config/providers/SomeUnknownHandler.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/com/opensymphony/xwork2/config/providers/SomeUnknownHandler.java b/core/src/test/java/com/opensymphony/xwork2/config/providers/SomeUnknownHandler.java
index 312f4c9..5e922e0 100644
--- a/core/src/test/java/com/opensymphony/xwork2/config/providers/SomeUnknownHandler.java
+++ b/core/src/test/java/com/opensymphony/xwork2/config/providers/SomeUnknownHandler.java
@@ -38,6 +38,11 @@ public class SomeUnknownHandler implements UnknownHandler{
return null;
}
+ @Override
+ public boolean isAllowedMethod(String allowedMethod, ActionConfig actionConfig) {
+ return false;
+ }
+
public void setActionConfig(ActionConfig actionConfig) {
this.actionConfig = actionConfig;
}
http://git-wip-us.apache.org/repos/asf/struts/blob/c3f4457b/core/src/test/resources/xwork-sample.xml
----------------------------------------------------------------------
diff --git a/core/src/test/resources/xwork-sample.xml b/core/src/test/resources/xwork-sample.xml
index 3705298..cd2ddcb 100644
--- a/core/src/test/resources/xwork-sample.xml
+++ b/core/src/test/resources/xwork-sample.xml
@@ -1,6 +1,6 @@
<!DOCTYPE xwork PUBLIC
- "-//Apache Struts//XWork 2.0//EN"
- "http://struts.apache.org/dtds/xwork-2.0.dtd"
+ "-//Apache Struts//XWork 2.5//EN"
+ "http://struts.apache.org/dtds/xwork-2.5.dtd"
>
<!-- "file:///temp/ross/xwork/src/etc/xwork-1.0.dtd" -->
@@ -14,6 +14,8 @@
</result>
</global-results>
+ <global-allowed-methods methods="execute,input,back,cancel,browse"/>
+
<action name="Foo" class="com.opensymphony.xwork2.SimpleAction">
<param name="foo">17</param>
<param name="bar">23</param>
[11/33] struts git commit: Fixes typo
Posted by lu...@apache.org.
Fixes typo
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/47a01eab
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/47a01eab
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/47a01eab
Branch: refs/heads/master
Commit: 47a01eab10d940fdc134cb666d3d2db0280d8ca8
Parents: 1855304
Author: Lukasz Lenart <lu...@apache.org>
Authored: Mon Aug 31 20:28:45 2015 +0200
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Mon Aug 31 20:28:45 2015 +0200
----------------------------------------------------------------------
.../xwork2/config/providers/XmlConfigurationProvider.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/47a01eab/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 0d64ad7..0302a68 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
@@ -548,7 +548,7 @@ public class XmlConfigurationProvider implements ConfigurationProvider {
loadGlobalAllowedMethods(newPackage, packageElement);
// load the global exception handler list for this package
- loadGobalExceptionMappings(newPackage, packageElement);
+ loadGlobalExceptionMappings(newPackage, packageElement);
// get actions
NodeList actionList = packageElement.getElementsByTagName("action");
@@ -922,7 +922,7 @@ public class XmlConfigurationProvider implements ConfigurationProvider {
* @param packageContext the package context
* @param packageElement the given XML element
*/
- protected void loadGobalExceptionMappings(PackageConfig.Builder packageContext, Element packageElement) {
+ protected void loadGlobalExceptionMappings(PackageConfig.Builder packageContext, Element packageElement) {
NodeList globalExceptionMappingList = packageElement.getElementsByTagName("global-exception-mappings");
if (globalExceptionMappingList.getLength() > 0) {
[06/33] struts git commit: Extends Unknown Handler to allowed check
if method is allowed
Posted by lu...@apache.org.
Extends Unknown Handler to allowed check if method is allowed
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/45659934
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/45659934
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/45659934
Branch: refs/heads/master
Commit: 4565993463f660e9be90b9fe9c3597ce54b58917
Parents: fb0c4a5
Author: Lukasz Lenart <lu...@apache.org>
Authored: Mon Aug 31 14:43:21 2015 +0200
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Mon Aug 31 14:43:21 2015 +0200
----------------------------------------------------------------------
.../opensymphony/xwork2/DefaultUnknownHandlerManager.java | 10 ++++++++++
.../main/java/com/opensymphony/xwork2/UnknownHandler.java | 10 ++++++++++
.../com/opensymphony/xwork2/UnknownHandlerManager.java | 3 +++
3 files changed, 23 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/45659934/core/src/main/java/com/opensymphony/xwork2/DefaultUnknownHandlerManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/DefaultUnknownHandlerManager.java b/core/src/main/java/com/opensymphony/xwork2/DefaultUnknownHandlerManager.java
index 5cafe9a..04ac430 100644
--- a/core/src/main/java/com/opensymphony/xwork2/DefaultUnknownHandlerManager.java
+++ b/core/src/main/java/com/opensymphony/xwork2/DefaultUnknownHandlerManager.java
@@ -145,4 +145,14 @@ public class DefaultUnknownHandlerManager implements UnknownHandlerManager {
public List<UnknownHandler> getUnknownHandlers() {
return unknownHandlers;
}
+
+ @Override
+ public boolean isAllowedMethod(String allowedMethod, ActionConfig config) {
+ for (UnknownHandler unknownHandler : unknownHandlers) {
+ if (unknownHandler.isAllowedMethod(allowedMethod, config)) {
+ return true;
+ }
+ }
+ return false;
+ }
}
http://git-wip-us.apache.org/repos/asf/struts/blob/45659934/core/src/main/java/com/opensymphony/xwork2/UnknownHandler.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/UnknownHandler.java b/core/src/main/java/com/opensymphony/xwork2/UnknownHandler.java
index 51556d6..1e6f5aa 100644
--- a/core/src/main/java/com/opensymphony/xwork2/UnknownHandler.java
+++ b/core/src/main/java/com/opensymphony/xwork2/UnknownHandler.java
@@ -60,4 +60,14 @@ public interface UnknownHandler {
*/
Object handleUnknownActionMethod(Object action, String methodName);
+ /**
+ * Handles the case when an action method is unknown and cannot be validated if it is allowed to be executed.
+ *
+ * @since 2.5
+ * @param allowedMethod The method's name
+ * @param actionConfig The config of actions
+ * @return true if allowedMethod can be executed, false otherwise
+ */
+ boolean isAllowedMethod(String allowedMethod, ActionConfig actionConfig);
+
}
http://git-wip-us.apache.org/repos/asf/struts/blob/45659934/core/src/main/java/com/opensymphony/xwork2/UnknownHandlerManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/UnknownHandlerManager.java b/core/src/main/java/com/opensymphony/xwork2/UnknownHandlerManager.java
index f5e2542..caf63b3 100644
--- a/core/src/main/java/com/opensymphony/xwork2/UnknownHandlerManager.java
+++ b/core/src/main/java/com/opensymphony/xwork2/UnknownHandlerManager.java
@@ -43,4 +43,7 @@ public interface UnknownHandlerManager {
boolean hasUnknownHandlers();
List<UnknownHandler> getUnknownHandlers();
+
+ boolean isAllowedMethod(String allowedMethod, ActionConfig actionConfig);
+
}
[13/33] struts git commit: Adds null-safety
Posted by lu...@apache.org.
Adds null-safety
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/4c7a7dd6
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/4c7a7dd6
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/4c7a7dd6
Branch: refs/heads/master
Commit: 4c7a7dd6c02457cf006318ed4621b7c432cc478c
Parents: 63bb6e3
Author: Lukasz Lenart <lu...@apache.org>
Authored: Mon Aug 31 21:46:16 2015 +0200
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Mon Aug 31 21:46:16 2015 +0200
----------------------------------------------------------------------
.../com/opensymphony/xwork2/config/impl/ActionConfigMatcher.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/4c7a7dd6/core/src/main/java/com/opensymphony/xwork2/config/impl/ActionConfigMatcher.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/config/impl/ActionConfigMatcher.java b/core/src/main/java/com/opensymphony/xwork2/config/impl/ActionConfigMatcher.java
index bb97ce8..7f17e41 100644
--- a/core/src/main/java/com/opensymphony/xwork2/config/impl/ActionConfigMatcher.java
+++ b/core/src/main/java/com/opensymphony/xwork2/config/impl/ActionConfigMatcher.java
@@ -77,7 +77,7 @@ public class ActionConfigMatcher extends AbstractMatcher<ActionConfig> implement
Map<String, String> vars) {
String methodName = convertParam(orig.getMethodName(), vars);
- if (!orig.isAllowedMethod(methodName)) {
+ if (methodName != null && !orig.isAllowedMethod(methodName)) {
return null;
}
[18/33] struts git commit: Adds support to define allowed methods as
regex
Posted by lu...@apache.org.
Adds support to define allowed methods as regex
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/e38d4657
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/e38d4657
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/e38d4657
Branch: refs/heads/master
Commit: e38d4657c6a973b30b9ece360f7ea2c97fb69555
Parents: e4fc852
Author: Lukasz Lenart <lu...@gmail.com>
Authored: Fri Sep 4 09:04:37 2015 +0200
Committer: Lukasz Lenart <lu...@gmail.com>
Committed: Fri Sep 4 09:04:37 2015 +0200
----------------------------------------------------------------------
.../xwork2/config/entities/ActionConfig.java | 1 +
.../xwork2/config/entities/AllowedMethods.java | 5 +++-
.../providers/XmlConfigurationProvider.java | 24 ++++++++++++--------
3 files changed, 20 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/e38d4657/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 5303e83..7c10c90 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,6 +43,7 @@ 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:.*";
protected List<InterceptorMapping> interceptors; // a list of interceptorMapping Objects eg. List<InterceptorMapping>
protected Map<String,String> params;
http://git-wip-us.apache.org/repos/asf/struts/blob/e38d4657/core/src/main/java/com/opensymphony/xwork2/config/entities/AllowedMethods.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/config/entities/AllowedMethods.java b/core/src/main/java/com/opensymphony/xwork2/config/entities/AllowedMethods.java
index 7a4fec1..f619d89 100644
--- a/core/src/main/java/com/opensymphony/xwork2/config/entities/AllowedMethods.java
+++ b/core/src/main/java/com/opensymphony/xwork2/config/entities/AllowedMethods.java
@@ -32,8 +32,11 @@ public class AllowedMethods {
ret.append(c);
}
}
- if (isPattern) {
+ if (isPattern && !method.startsWith("regex:")) {
return new PatternAllowedMethod(ret.toString(), method);
+ } else if (method.startsWith("regex:")) {
+ String pattern = method.substring(method.indexOf(":") + 1);
+ return new PatternAllowedMethod(pattern, method);
} else {
return new LiteralAllowedMethod(ret.toString());
}
http://git-wip-us.apache.org/repos/asf/struts/blob/e38d4657/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 3009dcb..950d4a1 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
@@ -845,17 +845,23 @@ public class XmlConfigurationProvider implements ConfigurationProvider {
protected Set<String> buildAllowedMethods(Element element, PackageConfig.Builder packageContext) {
NodeList allowedMethodsEls = element.getElementsByTagName("allowed-methods");
- Set<String> allowedMethods = packageContext.getGlobalAllowedMethods();
-
- if (allowedMethodsEls.getLength() > 0) {
- allowedMethods = new HashSet<>();
- Node n = allowedMethodsEls.item(0).getFirstChild();
- if (n != null) {
- String s = n.getNodeValue().trim();
- if (s.length() > 0) {
- allowedMethods = TextParseUtil.commaDelimitedStringToSet(s);
+ Set<String> allowedMethods;
+ if (packageContext.isStrictMethodInvocation()) {
+ allowedMethods = packageContext.getGlobalAllowedMethods();
+
+ if (allowedMethodsEls.getLength() > 0) {
+ allowedMethods = new HashSet<>();
+ Node n = allowedMethodsEls.item(0).getFirstChild();
+ if (n != null) {
+ String s = n.getNodeValue().trim();
+ if (s.length() > 0) {
+ allowedMethods = TextParseUtil.commaDelimitedStringToSet(s);
+ }
}
}
+ } else {
+ allowedMethods = new HashSet<>();
+ allowedMethods.add(ActionConfig.REGEX_WILDCARD);
}
return allowedMethods;
[24/33] struts git commit: Adjusts tests
Posted by lu...@apache.org.
Adjusts tests
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/3ccd7307
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/3ccd7307
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/3ccd7307
Branch: refs/heads/master
Commit: 3ccd7307f9af04d1f45a9ddd2360c390d83e13b0
Parents: 0aaade6
Author: Lukasz Lenart <lu...@gmail.com>
Authored: Fri Sep 4 11:35:31 2015 +0200
Committer: Lukasz Lenart <lu...@gmail.com>
Committed: Fri Sep 4 11:35:31 2015 +0200
----------------------------------------------------------------------
.../XmlConfigurationProviderActionsTest.java | 16 ++++++++++++++--
.../XmlConfigurationProviderAllowedMethodsTest.java | 10 +++++-----
...lConfigurationProviderExceptionMappingsTest.java | 7 ++++---
.../XmlConfigurationProviderInterceptorsTest.java | 6 ++++++
.../XmlConfigurationProviderResultsTest.java | 1 +
.../config/providers/xwork-test-allowed-methods.xml | 4 ++--
6 files changed, 32 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/3ccd7307/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderActionsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderActionsTest.java b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderActionsTest.java
index 2181181..cde4c62 100644
--- a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderActionsTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderActionsTest.java
@@ -56,6 +56,7 @@ public class XmlConfigurationProviderActionsTest extends ConfigurationTestBase {
ActionConfig barAction = new ActionConfig.Builder("", "Bar", SimpleAction.class.getName())
+ .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.addParams(params).build();
// foo action is a little more complex, two params, a result and an interceptor stack
@@ -72,6 +73,7 @@ public class XmlConfigurationProviderActionsTest extends ConfigurationTestBase {
.addParams(params)
.addResultConfigs(results)
.addInterceptors(interceptors)
+ .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.build();
// wildcard action is simple wildcard example
@@ -81,6 +83,7 @@ public class XmlConfigurationProviderActionsTest extends ConfigurationTestBase {
ActionConfig wildcardAction = new ActionConfig.Builder("", "WildCard", SimpleAction.class.getName())
.addResultConfigs(results)
.addInterceptors(interceptors)
+ .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.build();
// fooBar action is a little more complex, two params, a result and an interceptor stack
@@ -99,6 +102,7 @@ public class XmlConfigurationProviderActionsTest extends ConfigurationTestBase {
.addResultConfigs(results)
.addInterceptors(interceptors)
.addExceptionMappings(exceptionMappings)
+ .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.build();
// TestInterceptorParam action tests that an interceptor worked
@@ -112,6 +116,7 @@ public class XmlConfigurationProviderActionsTest extends ConfigurationTestBase {
ActionConfig intAction = new ActionConfig.Builder("", "TestInterceptorParam", SimpleAction.class.getName())
.addInterceptors(interceptors)
+ .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.build();
// TestInterceptorParamOverride action tests that an interceptor with a param override worked
@@ -123,6 +128,7 @@ public class XmlConfigurationProviderActionsTest extends ConfigurationTestBase {
ActionConfig intOverAction = new ActionConfig.Builder("", "TestInterceptorParamOverride", SimpleAction.class.getName())
.addInterceptors(interceptors)
+ .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.build();
// execute the configuration
@@ -164,7 +170,10 @@ public class XmlConfigurationProviderActionsTest extends ConfigurationTestBase {
params.put("bar", "23");
ActionConfig barWithPackageDefaultClassRefConfig =
- new ActionConfig.Builder("", "Bar", "").addParams(params).build();
+ new ActionConfig.Builder("", "Bar", "")
+ .addParams(params)
+ .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
+ .build();
// execute the configuration
provider.init(configuration);
@@ -188,7 +197,10 @@ public class XmlConfigurationProviderActionsTest extends ConfigurationTestBase {
params.put("bar", "23");
ActionConfig barWithoutClassNameConfig =
- new ActionConfig.Builder("", "BarWithoutClassName", "").addParams(params).build();
+ new ActionConfig.Builder("", "BarWithoutClassName", "")
+ .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
+ .addParams(params)
+ .build();
// execute the configuration
provider.init(configuration);
http://git-wip-us.apache.org/repos/asf/struts/blob/3ccd7307/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderAllowedMethodsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderAllowedMethodsTest.java b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderAllowedMethodsTest.java
index 11f779a..4b4460a 100644
--- a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderAllowedMethodsTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderAllowedMethodsTest.java
@@ -27,12 +27,12 @@ public class XmlConfigurationProviderAllowedMethodsTest extends ConfigurationTes
assertEquals(5, actionConfigs.size());
ActionConfig action = (ActionConfig) actionConfigs.get("Default");
- assertEquals(0, action.getAllowedMethods().size());
+ assertEquals(1, action.getAllowedMethods().size());
assertTrue(action.isAllowedMethod("execute"));
- assertFalse(action.isAllowedMethod("foo"));
- assertFalse(action.isAllowedMethod("bar"));
- assertFalse(action.isAllowedMethod("baz"));
- assertFalse(action.isAllowedMethod("xyz"));
+ assertTrue(action.isAllowedMethod("foo"));
+ assertTrue(action.isAllowedMethod("bar"));
+ assertTrue(action.isAllowedMethod("baz"));
+ assertTrue(action.isAllowedMethod("xyz"));
action = (ActionConfig) actionConfigs.get("Boring");
assertEquals(0, action.getAllowedMethods().size());
http://git-wip-us.apache.org/repos/asf/struts/blob/3ccd7307/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderExceptionMappingsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderExceptionMappingsTest.java b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderExceptionMappingsTest.java
index 232efd3..d02a312 100644
--- a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderExceptionMappingsTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderExceptionMappingsTest.java
@@ -32,20 +32,21 @@ public class XmlConfigurationProviderExceptionMappingsTest extends Configuration
exceptionMappings.add(
new ExceptionMappingConfig.Builder("spooky-result", "com.opensymphony.xwork2.SpookyException", "spooky-result")
- .build());
+ .build());
results.put("spooky-result", new ResultConfig.Builder("spooky-result", MockResult.class.getName()).build());
Map<String, String> resultParams = new HashMap<>();
resultParams.put("actionName", "bar.vm");
results.put("specificLocationResult",
new ResultConfig.Builder("specificLocationResult", ActionChainResult.class.getName())
- .addParams(resultParams)
- .build());
+ .addParams(resultParams)
+ .build());
ActionConfig expectedAction = new ActionConfig.Builder("default", "Bar", SimpleAction.class.getName())
.addParams(parameters)
.addResultConfigs(results)
.addExceptionMappings(exceptionMappings)
+ .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.build();
// execute the configuration
http://git-wip-us.apache.org/repos/asf/struts/blob/3ccd7307/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderInterceptorsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderInterceptorsTest.java b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderInterceptorsTest.java
index 4f26b5f..b10eb49 100644
--- a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderInterceptorsTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderInterceptorsTest.java
@@ -108,16 +108,19 @@ public class XmlConfigurationProviderInterceptorsTest extends ConfigurationTestB
ActionConfig actionWithOwnRef = new ActionConfig.Builder("", "ActionWithOwnRef", SimpleAction.class.getName())
.addInterceptors(interceptors)
+ .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.build();
ActionConfig actionWithDefaultRef = new ActionConfig.Builder("", "ActionWithDefaultRef", SimpleAction.class.getName())
.addInterceptor(new InterceptorMapping("timer", objectFactory.buildInterceptor(timerInterceptor, new HashMap<String, String>())))
+ .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.build();
// sub package
// this should inherit
ActionConfig actionWithNoRef = new ActionConfig.Builder("", "ActionWithNoRef", SimpleAction.class.getName())
.addInterceptor(new InterceptorMapping("timer", objectFactory.buildInterceptor(timerInterceptor, new HashMap<String, String>())))
+ .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.build();
interceptors = new ArrayList<>();
@@ -125,6 +128,7 @@ public class XmlConfigurationProviderInterceptorsTest extends ConfigurationTestB
ActionConfig anotherActionWithOwnRef = new ActionConfig.Builder("", "AnotherActionWithOwnRef", SimpleAction.class.getName())
.addInterceptor(new InterceptorMapping("logging", objectFactory.buildInterceptor(loggingInterceptor, new HashMap<String, String>())))
+ .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.build();
RuntimeConfiguration runtimeConfig = configurationManager.getConfiguration().getRuntimeConfiguration();
@@ -184,6 +188,7 @@ public class XmlConfigurationProviderInterceptorsTest extends ConfigurationTestB
ActionConfig intAction = new ActionConfig.Builder("", "TestInterceptorParam", SimpleAction.class.getName())
.addInterceptors(interceptors)
+ .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.build();
// TestInterceptorParamOverride action tests that an interceptor with a param override worked
@@ -202,6 +207,7 @@ public class XmlConfigurationProviderInterceptorsTest extends ConfigurationTestB
ActionConfig intOverAction = new ActionConfig.Builder("", "TestInterceptorParamOverride", SimpleAction.class.getName())
.addInterceptors(interceptors)
+ .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.build();
ConfigurationProvider provider = buildConfigurationProvider("com/opensymphony/xwork2/config/providers/xwork-test-interceptor-params.xml");
http://git-wip-us.apache.org/repos/asf/struts/blob/3ccd7307/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderResultsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderResultsTest.java b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderResultsTest.java
index caa9da0..d096c14 100644
--- a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderResultsTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderResultsTest.java
@@ -67,6 +67,7 @@ public class XmlConfigurationProviderResultsTest extends ConfigurationTestBase {
ActionConfig expectedAction = new ActionConfig.Builder("default", "Bar", SimpleAction.class.getName())
.addParams(parameters)
.addResultConfigs(results)
+ .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.build();
// execute the configuration
http://git-wip-us.apache.org/repos/asf/struts/blob/3ccd7307/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-allowed-methods.xml
----------------------------------------------------------------------
diff --git a/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-allowed-methods.xml b/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-allowed-methods.xml
index 4059d62..6741e66 100644
--- a/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-allowed-methods.xml
+++ b/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-allowed-methods.xml
@@ -4,7 +4,7 @@
>
<xwork>
- <package name="default">
+ <package name="default" strict-method-invocation="false">
<action name="Default">
</action>
@@ -25,7 +25,7 @@
</action>
</package>
- <package name="strict">
+ <package name="strict" strict-method-invocation="true">
<action name="Default">
</action>
[31/33] struts git commit: Switches Strict DMI to true by default and
allows to be disabled in user's package
Posted by lu...@apache.org.
Switches Strict DMI to true by default and allows to be disabled in user's package
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/86afcbe6
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/86afcbe6
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/86afcbe6
Branch: refs/heads/master
Commit: 86afcbe611f7c3afda26e396cc4504d3c9998398
Parents: b838105
Author: Lukasz Lenart <lu...@gmail.com>
Authored: Fri Sep 25 10:42:43 2015 +0200
Committer: Lukasz Lenart <lu...@gmail.com>
Committed: Fri Sep 25 10:42:43 2015 +0200
----------------------------------------------------------------------
.../opensymphony/xwork2/config/entities/PackageConfig.java | 9 +++++++--
.../xwork2/config/providers/XmlConfigurationProvider.java | 6 +++++-
.../providers/XmlConfigurationProviderActionsTest.java | 8 --------
.../XmlConfigurationProviderExceptionMappingsTest.java | 1 -
.../providers/XmlConfigurationProviderInterceptorsTest.java | 4 ----
.../providers/XmlConfigurationProviderResultsTest.java | 1 -
6 files changed, 12 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/86afcbe6/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java b/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
index e5d3ef4..e297b49 100644
--- a/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
+++ b/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
@@ -433,7 +433,7 @@ public class PackageConfig extends Located implements Comparable, Serializable,
public static class Builder implements InterceptorLocator {
protected PackageConfig target;
- private boolean strictDMI;
+ private boolean strictDMI = true;
public Builder(String name) {
target = new PackageConfig(name);
@@ -605,12 +605,17 @@ public class PackageConfig extends Located implements Comparable, Serializable,
}
public boolean isStrictMethodInvocation() {
+ // if Strict DMI was disabled in this package,
+ // return without evaluating parent packages
+ if (!strictDMI) {
+ return false;
+ }
for (PackageConfig parent : target.parents) {
if (parent.isStrictMethodInvocation()) {
return true;
}
}
- return strictDMI;
+ return true;
}
public PackageConfig build() {
http://git-wip-us.apache.org/repos/asf/struts/blob/86afcbe6/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 7d2e065..35e2019 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
@@ -649,7 +649,11 @@ public class XmlConfigurationProvider implements ConfigurationProvider {
String name = StringUtils.defaultString(packageElement.getAttribute("name"));
String namespace = StringUtils.defaultString(packageElement.getAttribute("namespace"));
- boolean strictDMI = Boolean.parseBoolean(packageElement.getAttribute("strict-method-invocation"));
+ // Strict DMI is enabled by default, it can disabled by user
+ boolean strictDMI = true;
+ if (packageElement.hasAttribute("strict-method-invocation")) {
+ strictDMI = Boolean.parseBoolean(packageElement.getAttribute("strict-method-invocation"));
+ }
PackageConfig.Builder cfg = new PackageConfig.Builder(name)
.namespace(namespace)
http://git-wip-us.apache.org/repos/asf/struts/blob/86afcbe6/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderActionsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderActionsTest.java b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderActionsTest.java
index cde4c62..bd23376 100644
--- a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderActionsTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderActionsTest.java
@@ -56,7 +56,6 @@ public class XmlConfigurationProviderActionsTest extends ConfigurationTestBase {
ActionConfig barAction = new ActionConfig.Builder("", "Bar", SimpleAction.class.getName())
- .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.addParams(params).build();
// foo action is a little more complex, two params, a result and an interceptor stack
@@ -73,7 +72,6 @@ public class XmlConfigurationProviderActionsTest extends ConfigurationTestBase {
.addParams(params)
.addResultConfigs(results)
.addInterceptors(interceptors)
- .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.build();
// wildcard action is simple wildcard example
@@ -83,7 +81,6 @@ public class XmlConfigurationProviderActionsTest extends ConfigurationTestBase {
ActionConfig wildcardAction = new ActionConfig.Builder("", "WildCard", SimpleAction.class.getName())
.addResultConfigs(results)
.addInterceptors(interceptors)
- .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.build();
// fooBar action is a little more complex, two params, a result and an interceptor stack
@@ -102,7 +99,6 @@ public class XmlConfigurationProviderActionsTest extends ConfigurationTestBase {
.addResultConfigs(results)
.addInterceptors(interceptors)
.addExceptionMappings(exceptionMappings)
- .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.build();
// TestInterceptorParam action tests that an interceptor worked
@@ -116,7 +112,6 @@ public class XmlConfigurationProviderActionsTest extends ConfigurationTestBase {
ActionConfig intAction = new ActionConfig.Builder("", "TestInterceptorParam", SimpleAction.class.getName())
.addInterceptors(interceptors)
- .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.build();
// TestInterceptorParamOverride action tests that an interceptor with a param override worked
@@ -128,7 +123,6 @@ public class XmlConfigurationProviderActionsTest extends ConfigurationTestBase {
ActionConfig intOverAction = new ActionConfig.Builder("", "TestInterceptorParamOverride", SimpleAction.class.getName())
.addInterceptors(interceptors)
- .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.build();
// execute the configuration
@@ -172,7 +166,6 @@ public class XmlConfigurationProviderActionsTest extends ConfigurationTestBase {
ActionConfig barWithPackageDefaultClassRefConfig =
new ActionConfig.Builder("", "Bar", "")
.addParams(params)
- .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.build();
// execute the configuration
@@ -198,7 +191,6 @@ public class XmlConfigurationProviderActionsTest extends ConfigurationTestBase {
ActionConfig barWithoutClassNameConfig =
new ActionConfig.Builder("", "BarWithoutClassName", "")
- .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.addParams(params)
.build();
http://git-wip-us.apache.org/repos/asf/struts/blob/86afcbe6/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderExceptionMappingsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderExceptionMappingsTest.java b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderExceptionMappingsTest.java
index d02a312..14e7383 100644
--- a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderExceptionMappingsTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderExceptionMappingsTest.java
@@ -46,7 +46,6 @@ public class XmlConfigurationProviderExceptionMappingsTest extends Configuration
.addParams(parameters)
.addResultConfigs(results)
.addExceptionMappings(exceptionMappings)
- .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.build();
// execute the configuration
http://git-wip-us.apache.org/repos/asf/struts/blob/86afcbe6/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderInterceptorsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderInterceptorsTest.java b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderInterceptorsTest.java
index cfd7f60..4f26b5f 100644
--- a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderInterceptorsTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderInterceptorsTest.java
@@ -108,12 +108,10 @@ public class XmlConfigurationProviderInterceptorsTest extends ConfigurationTestB
ActionConfig actionWithOwnRef = new ActionConfig.Builder("", "ActionWithOwnRef", SimpleAction.class.getName())
.addInterceptors(interceptors)
- .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.build();
ActionConfig actionWithDefaultRef = new ActionConfig.Builder("", "ActionWithDefaultRef", SimpleAction.class.getName())
.addInterceptor(new InterceptorMapping("timer", objectFactory.buildInterceptor(timerInterceptor, new HashMap<String, String>())))
- .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.build();
// sub package
@@ -186,7 +184,6 @@ public class XmlConfigurationProviderInterceptorsTest extends ConfigurationTestB
ActionConfig intAction = new ActionConfig.Builder("", "TestInterceptorParam", SimpleAction.class.getName())
.addInterceptors(interceptors)
- .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.build();
// TestInterceptorParamOverride action tests that an interceptor with a param override worked
@@ -205,7 +202,6 @@ public class XmlConfigurationProviderInterceptorsTest extends ConfigurationTestB
ActionConfig intOverAction = new ActionConfig.Builder("", "TestInterceptorParamOverride", SimpleAction.class.getName())
.addInterceptors(interceptors)
- .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.build();
ConfigurationProvider provider = buildConfigurationProvider("com/opensymphony/xwork2/config/providers/xwork-test-interceptor-params.xml");
http://git-wip-us.apache.org/repos/asf/struts/blob/86afcbe6/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderResultsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderResultsTest.java b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderResultsTest.java
index d096c14..caa9da0 100644
--- a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderResultsTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderResultsTest.java
@@ -67,7 +67,6 @@ public class XmlConfigurationProviderResultsTest extends ConfigurationTestBase {
ActionConfig expectedAction = new ActionConfig.Builder("default", "Bar", SimpleAction.class.getName())
.addParams(parameters)
.addResultConfigs(results)
- .addAllowedMethod(ActionConfig.REGEX_WILDCARD)
.build();
// execute the configuration
[08/33] struts git commit: Fixes tests
Posted by lu...@apache.org.
Fixes tests
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/c1928ad0
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/c1928ad0
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/c1928ad0
Branch: refs/heads/master
Commit: c1928ad06bdfbe245b1ed7d5bfeb07ed9bface37
Parents: c3f4457
Author: Lukasz Lenart <lu...@apache.org>
Authored: Mon Aug 31 18:36:04 2015 +0200
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Mon Aug 31 18:36:04 2015 +0200
----------------------------------------------------------------------
.../XmlConfigurationProviderAllowedMethodsTest.java | 14 +++++++-------
.../config/providers/xwork-test-allowed-methods.xml | 2 +-
2 files changed, 8 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/c1928ad0/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderAllowedMethodsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderAllowedMethodsTest.java b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderAllowedMethodsTest.java
index 6a55e75..11f779a 100644
--- a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderAllowedMethodsTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderAllowedMethodsTest.java
@@ -27,12 +27,12 @@ public class XmlConfigurationProviderAllowedMethodsTest extends ConfigurationTes
assertEquals(5, actionConfigs.size());
ActionConfig action = (ActionConfig) actionConfigs.get("Default");
- assertEquals(1, action.getAllowedMethods().size());
+ assertEquals(0, action.getAllowedMethods().size());
assertTrue(action.isAllowedMethod("execute"));
- assertTrue(action.isAllowedMethod("foo"));
- assertTrue(action.isAllowedMethod("bar"));
- assertTrue(action.isAllowedMethod("baz"));
- assertTrue(action.isAllowedMethod("xyz"));
+ assertFalse(action.isAllowedMethod("foo"));
+ assertFalse(action.isAllowedMethod("bar"));
+ assertFalse(action.isAllowedMethod("baz"));
+ assertFalse(action.isAllowedMethod("xyz"));
action = (ActionConfig) actionConfigs.get("Boring");
assertEquals(0, action.getAllowedMethods().size());
@@ -59,7 +59,7 @@ public class XmlConfigurationProviderAllowedMethodsTest extends ConfigurationTes
assertFalse(action.isAllowedMethod("xyz"));
action = (ActionConfig) actionConfigs.get("Baz");
- assertEquals(2, action.getAllowedMethods().size());
+ assertEquals(3, action.getAllowedMethods().size());
assertFalse(action.isAllowedMethod("execute"));
assertTrue(action.isAllowedMethod("foo"));
assertTrue(action.isAllowedMethod("bar"));
@@ -114,7 +114,7 @@ public class XmlConfigurationProviderAllowedMethodsTest extends ConfigurationTes
assertFalse(action.isAllowedMethod("xyz"));
action = (ActionConfig) actionConfigs.get("Baz");
- assertEquals(2, action.getAllowedMethods().size());
+ assertEquals(3, action.getAllowedMethods().size());
assertFalse(action.isAllowedMethod("execute"));
assertTrue(action.isAllowedMethod("foo"));
assertTrue(action.isAllowedMethod("bar"));
http://git-wip-us.apache.org/repos/asf/struts/blob/c1928ad0/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-allowed-methods.xml
----------------------------------------------------------------------
diff --git a/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-allowed-methods.xml b/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-allowed-methods.xml
index 7851408..4059d62 100644
--- a/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-allowed-methods.xml
+++ b/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-allowed-methods.xml
@@ -25,7 +25,7 @@
</action>
</package>
- <package name="strict" strict-method-invocation="true">
+ <package name="strict">
<action name="Default">
</action>
[32/33] struts git commit: Simplifies checking of Strict DMI to
simple getter
Posted by lu...@apache.org.
Simplifies checking of Strict DMI to simple getter
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/fdb6daec
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/fdb6daec
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/fdb6daec
Branch: refs/heads/master
Commit: fdb6daec7859e0cf95a0da5482991b8342cf91ad
Parents: 86afcbe
Author: Lukasz Lenart <lu...@gmail.com>
Authored: Sat Sep 26 08:57:44 2015 +0200
Committer: Lukasz Lenart <lu...@gmail.com>
Committed: Sat Sep 26 08:57:44 2015 +0200
----------------------------------------------------------------------
.../xwork2/config/entities/PackageConfig.java | 14 +----
.../config/entities/PackageConfigTest.java | 62 +++++++++++++++++++-
2 files changed, 62 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/fdb6daec/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java b/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
index e297b49..1e7a4dd 100644
--- a/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
+++ b/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
@@ -600,22 +600,12 @@ public class PackageConfig extends Located implements Comparable, Serializable,
}
public Builder strictMethodInvocation(boolean strict) {
- strictDMI = strict;
+ target.strictMethodInvocation = strict;
return this;
}
public boolean isStrictMethodInvocation() {
- // if Strict DMI was disabled in this package,
- // return without evaluating parent packages
- if (!strictDMI) {
- return false;
- }
- for (PackageConfig parent : target.parents) {
- if (parent.isStrictMethodInvocation()) {
- return true;
- }
- }
- return true;
+ return target.strictMethodInvocation;
}
public PackageConfig build() {
http://git-wip-us.apache.org/repos/asf/struts/blob/fdb6daec/core/src/test/java/com/opensymphony/xwork2/config/entities/PackageConfigTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/com/opensymphony/xwork2/config/entities/PackageConfigTest.java b/core/src/test/java/com/opensymphony/xwork2/config/entities/PackageConfigTest.java
index e2f2868..4a25ccb 100644
--- a/core/src/test/java/com/opensymphony/xwork2/config/entities/PackageConfigTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/config/entities/PackageConfigTest.java
@@ -30,5 +30,63 @@ public class PackageConfigTest extends XWorkTestCase {
assertEquals("ref2", cfg.getFullDefaultInterceptorRef());
}
-
-}
\ No newline at end of file
+
+ public void testStrictDMIInheritance() {
+ // given
+ PackageConfig parent = new PackageConfig.Builder("parent").build();
+
+ // when
+ PackageConfig child = new PackageConfig.Builder("child")
+ .addParent(parent)
+ .build();
+
+ // then
+ assertTrue(child.isStrictMethodInvocation());
+ }
+
+ public void testStrictDMIInheritanceDisabledInParentPackage() {
+ // given
+ PackageConfig parent = new PackageConfig.Builder("parent")
+ .strictMethodInvocation(false)
+ .build();
+
+ // when
+ PackageConfig child = new PackageConfig.Builder("child")
+ .addParent(parent)
+ .build();
+
+ // then
+ assertTrue(child.isStrictMethodInvocation());
+ }
+
+ public void testStrictDMIInheritanceDisabledInBothPackage() {
+ // given
+ PackageConfig parent = new PackageConfig.Builder("parent")
+ .strictMethodInvocation(false)
+ .build();
+
+ // when
+ PackageConfig child = new PackageConfig.Builder("child")
+ .addParent(parent)
+ .strictMethodInvocation(false)
+ .build();
+
+ // then
+ assertFalse(child.isStrictMethodInvocation());
+ }
+
+ public void testStrictDMIInheritanceDisabledInChildPackage() {
+ // given
+ PackageConfig parent = new PackageConfig.Builder("parent").build();
+
+ // when
+ PackageConfig child = new PackageConfig.Builder("child")
+ .addParent(parent)
+ .strictMethodInvocation(false)
+ .build();
+
+ // then
+ assertFalse(child.isStrictMethodInvocation());
+ }
+
+}