From f8381fbdbf2893d232b12a24299c5698041f0efd Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Sun, 7 Apr 2024 08:13:07 +0200 Subject: [PATCH 01/21] [maven-release-plugin] prepare release STRUTS_6_4_0 --- apps/pom.xml | 2 +- apps/rest-showcase/pom.xml | 4 ++-- apps/showcase/pom.xml | 2 +- assembly/pom.xml | 2 +- bom/pom.xml | 8 ++++---- bundles/admin/pom.xml | 2 +- bundles/demo/pom.xml | 2 +- bundles/pom.xml | 2 +- core/pom.xml | 2 +- plugins/async/pom.xml | 2 +- plugins/bean-validation/pom.xml | 2 +- plugins/cdi/pom.xml | 2 +- plugins/config-browser/pom.xml | 2 +- plugins/convention/pom.xml | 2 +- plugins/dwr/pom.xml | 2 +- plugins/embeddedjsp/pom.xml | 2 +- plugins/gxp/pom.xml | 2 +- plugins/jasperreports/pom.xml | 2 +- plugins/javatemplates/pom.xml | 2 +- plugins/jfreechart/pom.xml | 2 +- plugins/json/pom.xml | 2 +- plugins/junit/pom.xml | 2 +- plugins/osgi/pom.xml | 2 +- plugins/oval/pom.xml | 2 +- plugins/pell-multipart/pom.xml | 2 +- plugins/plexus/pom.xml | 2 +- plugins/pom.xml | 2 +- plugins/portlet-junit/pom.xml | 2 +- plugins/portlet-mocks/pom.xml | 2 +- plugins/portlet-tiles/pom.xml | 2 +- plugins/portlet/pom.xml | 2 +- plugins/rest/pom.xml | 2 +- plugins/sitemesh/pom.xml | 2 +- plugins/spring/pom.xml | 2 +- plugins/testng/pom.xml | 2 +- plugins/tiles/pom.xml | 2 +- plugins/velocity/pom.xml | 2 +- plugins/xslt/pom.xml | 2 +- pom.xml | 6 +++--- 39 files changed, 45 insertions(+), 45 deletions(-) diff --git a/apps/pom.xml b/apps/pom.xml index a1a187151..def718cbe 100644 --- a/apps/pom.xml +++ b/apps/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-parent - 6.4.0-SNAPSHOT + 6.4.0 struts2-apps pom diff --git a/apps/rest-showcase/pom.xml b/apps/rest-showcase/pom.xml index 7c6f16051..0af45ba83 100644 --- a/apps/rest-showcase/pom.xml +++ b/apps/rest-showcase/pom.xml @@ -24,12 +24,12 @@ org.apache.struts struts2-apps - 6.4.0-SNAPSHOT + 6.4.0 struts2-rest-showcase war - 6.4.0-SNAPSHOT + 6.4.0 Struts 2 Rest Showcase Webapp Struts 2 Rest Showcase Example diff --git a/apps/showcase/pom.xml b/apps/showcase/pom.xml index 263c029f8..e07d22dcd 100644 --- a/apps/showcase/pom.xml +++ b/apps/showcase/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-apps - 6.4.0-SNAPSHOT + 6.4.0 struts2-showcase diff --git a/assembly/pom.xml b/assembly/pom.xml index 531e3fb1a..4e76f7f3e 100644 --- a/assembly/pom.xml +++ b/assembly/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-parent - 6.4.0-SNAPSHOT + 6.4.0 struts2-assembly diff --git a/bom/pom.xml b/bom/pom.xml index c0b520f81..b4fe9687a 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -25,11 +25,11 @@ org.apache.struts struts2-parent - 6.4.0-SNAPSHOT + 6.4.0 struts2-bom - 6.4.0-SNAPSHOT + 6.4.0 pom Struts 2 Bill of Materials @@ -44,7 +44,7 @@ - 6.4.0-SNAPSHOT + 6.4.0 true true @@ -190,7 +190,7 @@ - STRUTS_6_3_0_1 + STRUTS_6_4_0 scm:git:https://gitbox.apache.org/repos/asf/struts.git scm:git:https://gitbox.apache.org/repos/asf/struts.git https://github.com/apache/struts/ diff --git a/bundles/admin/pom.xml b/bundles/admin/pom.xml index 8c2c35a7d..0bd89bb80 100644 --- a/bundles/admin/pom.xml +++ b/bundles/admin/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-osgi-bundles - 6.4.0-SNAPSHOT + 6.4.0 struts2-osgi-admin-bundle diff --git a/bundles/demo/pom.xml b/bundles/demo/pom.xml index 884bdce3a..f2b8399da 100644 --- a/bundles/demo/pom.xml +++ b/bundles/demo/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-osgi-bundles - 6.4.0-SNAPSHOT + 6.4.0 struts2-osgi-demo-bundle diff --git a/bundles/pom.xml b/bundles/pom.xml index 408947c8f..bce21ff1d 100755 --- a/bundles/pom.xml +++ b/bundles/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-parent - 6.4.0-SNAPSHOT + 6.4.0 struts2-osgi-bundles diff --git a/core/pom.xml b/core/pom.xml index 26634e2d6..0af7d3ec7 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-parent - 6.4.0-SNAPSHOT + 6.4.0 struts2-core jar diff --git a/plugins/async/pom.xml b/plugins/async/pom.xml index 2233f9e3c..9b52a6532 100644 --- a/plugins/async/pom.xml +++ b/plugins/async/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-async-plugin diff --git a/plugins/bean-validation/pom.xml b/plugins/bean-validation/pom.xml index 5609961a7..166a2240a 100644 --- a/plugins/bean-validation/pom.xml +++ b/plugins/bean-validation/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 4.0.0 diff --git a/plugins/cdi/pom.xml b/plugins/cdi/pom.xml index 307f9af5a..b243cd475 100644 --- a/plugins/cdi/pom.xml +++ b/plugins/cdi/pom.xml @@ -25,7 +25,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-cdi-plugin diff --git a/plugins/config-browser/pom.xml b/plugins/config-browser/pom.xml index f82e8d2b7..bb7df8e63 100644 --- a/plugins/config-browser/pom.xml +++ b/plugins/config-browser/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-config-browser-plugin diff --git a/plugins/convention/pom.xml b/plugins/convention/pom.xml index 99b114ae1..5b6233f73 100644 --- a/plugins/convention/pom.xml +++ b/plugins/convention/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-convention-plugin diff --git a/plugins/dwr/pom.xml b/plugins/dwr/pom.xml index ac49be32d..eb7471f9a 100644 --- a/plugins/dwr/pom.xml +++ b/plugins/dwr/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-dwr-plugin diff --git a/plugins/embeddedjsp/pom.xml b/plugins/embeddedjsp/pom.xml index 53d6b4be2..c51f2571c 100644 --- a/plugins/embeddedjsp/pom.xml +++ b/plugins/embeddedjsp/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-embeddedjsp-plugin diff --git a/plugins/gxp/pom.xml b/plugins/gxp/pom.xml index daec7b139..f60e6343b 100644 --- a/plugins/gxp/pom.xml +++ b/plugins/gxp/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-gxp-plugin diff --git a/plugins/jasperreports/pom.xml b/plugins/jasperreports/pom.xml index 59549ec7b..64767d9ec 100644 --- a/plugins/jasperreports/pom.xml +++ b/plugins/jasperreports/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-jasperreports-plugin diff --git a/plugins/javatemplates/pom.xml b/plugins/javatemplates/pom.xml index 57d4d08a9..0f66df840 100644 --- a/plugins/javatemplates/pom.xml +++ b/plugins/javatemplates/pom.xml @@ -25,7 +25,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-javatemplates-plugin diff --git a/plugins/jfreechart/pom.xml b/plugins/jfreechart/pom.xml index 32d2f95de..0d242b66e 100644 --- a/plugins/jfreechart/pom.xml +++ b/plugins/jfreechart/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-jfreechart-plugin diff --git a/plugins/json/pom.xml b/plugins/json/pom.xml index 63772ea1a..11011aecc 100644 --- a/plugins/json/pom.xml +++ b/plugins/json/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-json-plugin diff --git a/plugins/junit/pom.xml b/plugins/junit/pom.xml index 51041e0a9..88b19a527 100644 --- a/plugins/junit/pom.xml +++ b/plugins/junit/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-junit-plugin diff --git a/plugins/osgi/pom.xml b/plugins/osgi/pom.xml index a5b4ed0ad..c2ba30f32 100644 --- a/plugins/osgi/pom.xml +++ b/plugins/osgi/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-osgi-plugin diff --git a/plugins/oval/pom.xml b/plugins/oval/pom.xml index ad011b259..06ee98187 100644 --- a/plugins/oval/pom.xml +++ b/plugins/oval/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-oval-plugin diff --git a/plugins/pell-multipart/pom.xml b/plugins/pell-multipart/pom.xml index 2b8cc9adc..0172cfb8f 100644 --- a/plugins/pell-multipart/pom.xml +++ b/plugins/pell-multipart/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-pell-multipart-plugin diff --git a/plugins/plexus/pom.xml b/plugins/plexus/pom.xml index 698ef7573..39f29b296 100644 --- a/plugins/plexus/pom.xml +++ b/plugins/plexus/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-plexus-plugin diff --git a/plugins/pom.xml b/plugins/pom.xml index 04b024304..46cc7b0ba 100644 --- a/plugins/pom.xml +++ b/plugins/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-parent - 6.4.0-SNAPSHOT + 6.4.0 struts2-plugins diff --git a/plugins/portlet-junit/pom.xml b/plugins/portlet-junit/pom.xml index 45b6b94be..3a3122f57 100644 --- a/plugins/portlet-junit/pom.xml +++ b/plugins/portlet-junit/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-portlet-junit-plugin diff --git a/plugins/portlet-mocks/pom.xml b/plugins/portlet-mocks/pom.xml index 9b3a6081a..a80ee2920 100644 --- a/plugins/portlet-mocks/pom.xml +++ b/plugins/portlet-mocks/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-portlet-mocks-plugin diff --git a/plugins/portlet-tiles/pom.xml b/plugins/portlet-tiles/pom.xml index c738a9b68..cd36c9545 100644 --- a/plugins/portlet-tiles/pom.xml +++ b/plugins/portlet-tiles/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-portlet-tiles-plugin diff --git a/plugins/portlet/pom.xml b/plugins/portlet/pom.xml index 8aed31c0b..30f97fbc9 100644 --- a/plugins/portlet/pom.xml +++ b/plugins/portlet/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-portlet-plugin diff --git a/plugins/rest/pom.xml b/plugins/rest/pom.xml index a3187d1f4..907d96d68 100644 --- a/plugins/rest/pom.xml +++ b/plugins/rest/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-rest-plugin diff --git a/plugins/sitemesh/pom.xml b/plugins/sitemesh/pom.xml index c7bde8e9d..827cf6fdd 100644 --- a/plugins/sitemesh/pom.xml +++ b/plugins/sitemesh/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-sitemesh-plugin diff --git a/plugins/spring/pom.xml b/plugins/spring/pom.xml index b546ba4ba..a5d438427 100644 --- a/plugins/spring/pom.xml +++ b/plugins/spring/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-spring-plugin diff --git a/plugins/testng/pom.xml b/plugins/testng/pom.xml index fb0154bff..aab465bd6 100644 --- a/plugins/testng/pom.xml +++ b/plugins/testng/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-testng-plugin diff --git a/plugins/tiles/pom.xml b/plugins/tiles/pom.xml index 1a6caf2c1..2d1dc99d0 100644 --- a/plugins/tiles/pom.xml +++ b/plugins/tiles/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-tiles-plugin diff --git a/plugins/velocity/pom.xml b/plugins/velocity/pom.xml index 7ecfbb102..51f5cde21 100644 --- a/plugins/velocity/pom.xml +++ b/plugins/velocity/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-velocity-plugin diff --git a/plugins/xslt/pom.xml b/plugins/xslt/pom.xml index cde4a8cfb..42e13d53f 100644 --- a/plugins/xslt/pom.xml +++ b/plugins/xslt/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-xslt-plugin diff --git a/pom.xml b/pom.xml index 79824373b..04fa7359e 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ 4.0.0 struts2-parent - 6.4.0-SNAPSHOT + 6.4.0 pom Struts 2 https://struts.apache.org/ @@ -51,7 +51,7 @@ scm:git:https://gitbox.apache.org/repos/asf/struts.git scm:git:https://gitbox.apache.org/repos/asf/struts.git https://github.com/apache/struts/ - STRUTS_6_3_0_1 + STRUTS_6_4_0 @@ -104,7 +104,7 @@ UTF-8 - 2023-09-11T07:49:50Z + 2024-04-07T06:06:33Z 1.8 1.8 From 5e8b81b3822b1e14b829cf69e6d8aa87b80376d9 Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Sun, 7 Apr 2024 08:13:17 +0200 Subject: [PATCH 02/21] [maven-release-plugin] prepare for next development iteration --- apps/pom.xml | 2 +- apps/rest-showcase/pom.xml | 4 ++-- apps/showcase/pom.xml | 2 +- assembly/pom.xml | 2 +- bom/pom.xml | 8 ++++---- bundles/admin/pom.xml | 2 +- bundles/demo/pom.xml | 2 +- bundles/pom.xml | 2 +- core/pom.xml | 2 +- plugins/async/pom.xml | 2 +- plugins/bean-validation/pom.xml | 2 +- plugins/cdi/pom.xml | 2 +- plugins/config-browser/pom.xml | 2 +- plugins/convention/pom.xml | 2 +- plugins/dwr/pom.xml | 2 +- plugins/embeddedjsp/pom.xml | 2 +- plugins/gxp/pom.xml | 2 +- plugins/jasperreports/pom.xml | 2 +- plugins/javatemplates/pom.xml | 2 +- plugins/jfreechart/pom.xml | 2 +- plugins/json/pom.xml | 2 +- plugins/junit/pom.xml | 2 +- plugins/osgi/pom.xml | 2 +- plugins/oval/pom.xml | 2 +- plugins/pell-multipart/pom.xml | 2 +- plugins/plexus/pom.xml | 2 +- plugins/pom.xml | 2 +- plugins/portlet-junit/pom.xml | 2 +- plugins/portlet-mocks/pom.xml | 2 +- plugins/portlet-tiles/pom.xml | 2 +- plugins/portlet/pom.xml | 2 +- plugins/rest/pom.xml | 2 +- plugins/sitemesh/pom.xml | 2 +- plugins/spring/pom.xml | 2 +- plugins/testng/pom.xml | 2 +- plugins/tiles/pom.xml | 2 +- plugins/velocity/pom.xml | 2 +- plugins/xslt/pom.xml | 2 +- pom.xml | 6 +++--- 39 files changed, 45 insertions(+), 45 deletions(-) diff --git a/apps/pom.xml b/apps/pom.xml index def718cbe..16c95aa5f 100644 --- a/apps/pom.xml +++ b/apps/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-parent - 6.4.0 + 6.5.0-SNAPSHOT struts2-apps pom diff --git a/apps/rest-showcase/pom.xml b/apps/rest-showcase/pom.xml index 0af45ba83..1961facbc 100644 --- a/apps/rest-showcase/pom.xml +++ b/apps/rest-showcase/pom.xml @@ -24,12 +24,12 @@ org.apache.struts struts2-apps - 6.4.0 + 6.5.0-SNAPSHOT struts2-rest-showcase war - 6.4.0 + 6.5.0-SNAPSHOT Struts 2 Rest Showcase Webapp Struts 2 Rest Showcase Example diff --git a/apps/showcase/pom.xml b/apps/showcase/pom.xml index e07d22dcd..a1a9138cd 100644 --- a/apps/showcase/pom.xml +++ b/apps/showcase/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-apps - 6.4.0 + 6.5.0-SNAPSHOT struts2-showcase diff --git a/assembly/pom.xml b/assembly/pom.xml index 4e76f7f3e..cc4c61fef 100644 --- a/assembly/pom.xml +++ b/assembly/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-parent - 6.4.0 + 6.5.0-SNAPSHOT struts2-assembly diff --git a/bom/pom.xml b/bom/pom.xml index b4fe9687a..a2bd291aa 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -25,11 +25,11 @@ org.apache.struts struts2-parent - 6.4.0 + 6.5.0-SNAPSHOT struts2-bom - 6.4.0 + 6.5.0-SNAPSHOT pom Struts 2 Bill of Materials @@ -44,7 +44,7 @@ - 6.4.0 + 6.5.0-SNAPSHOT true true @@ -190,7 +190,7 @@ - STRUTS_6_4_0 + STRUTS_6_3_0_1 scm:git:https://gitbox.apache.org/repos/asf/struts.git scm:git:https://gitbox.apache.org/repos/asf/struts.git https://github.com/apache/struts/ diff --git a/bundles/admin/pom.xml b/bundles/admin/pom.xml index 0bd89bb80..1485e7f68 100644 --- a/bundles/admin/pom.xml +++ b/bundles/admin/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-osgi-bundles - 6.4.0 + 6.5.0-SNAPSHOT struts2-osgi-admin-bundle diff --git a/bundles/demo/pom.xml b/bundles/demo/pom.xml index f2b8399da..ad74c9648 100644 --- a/bundles/demo/pom.xml +++ b/bundles/demo/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-osgi-bundles - 6.4.0 + 6.5.0-SNAPSHOT struts2-osgi-demo-bundle diff --git a/bundles/pom.xml b/bundles/pom.xml index bce21ff1d..ebd7adbf3 100755 --- a/bundles/pom.xml +++ b/bundles/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-parent - 6.4.0 + 6.5.0-SNAPSHOT struts2-osgi-bundles diff --git a/core/pom.xml b/core/pom.xml index 0af7d3ec7..3fcfaaf7b 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-parent - 6.4.0 + 6.5.0-SNAPSHOT struts2-core jar diff --git a/plugins/async/pom.xml b/plugins/async/pom.xml index 9b52a6532..4eb41aa7f 100644 --- a/plugins/async/pom.xml +++ b/plugins/async/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-async-plugin diff --git a/plugins/bean-validation/pom.xml b/plugins/bean-validation/pom.xml index 166a2240a..f789b404d 100644 --- a/plugins/bean-validation/pom.xml +++ b/plugins/bean-validation/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT 4.0.0 diff --git a/plugins/cdi/pom.xml b/plugins/cdi/pom.xml index b243cd475..571dc169e 100644 --- a/plugins/cdi/pom.xml +++ b/plugins/cdi/pom.xml @@ -25,7 +25,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-cdi-plugin diff --git a/plugins/config-browser/pom.xml b/plugins/config-browser/pom.xml index bb7df8e63..0dd09fd9a 100644 --- a/plugins/config-browser/pom.xml +++ b/plugins/config-browser/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-config-browser-plugin diff --git a/plugins/convention/pom.xml b/plugins/convention/pom.xml index 5b6233f73..520c2f33a 100644 --- a/plugins/convention/pom.xml +++ b/plugins/convention/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-convention-plugin diff --git a/plugins/dwr/pom.xml b/plugins/dwr/pom.xml index eb7471f9a..1ed3c97ca 100644 --- a/plugins/dwr/pom.xml +++ b/plugins/dwr/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-dwr-plugin diff --git a/plugins/embeddedjsp/pom.xml b/plugins/embeddedjsp/pom.xml index c51f2571c..e18fe8f70 100644 --- a/plugins/embeddedjsp/pom.xml +++ b/plugins/embeddedjsp/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-embeddedjsp-plugin diff --git a/plugins/gxp/pom.xml b/plugins/gxp/pom.xml index f60e6343b..61f2a6a4c 100644 --- a/plugins/gxp/pom.xml +++ b/plugins/gxp/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-gxp-plugin diff --git a/plugins/jasperreports/pom.xml b/plugins/jasperreports/pom.xml index 64767d9ec..23a4c49cf 100644 --- a/plugins/jasperreports/pom.xml +++ b/plugins/jasperreports/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-jasperreports-plugin diff --git a/plugins/javatemplates/pom.xml b/plugins/javatemplates/pom.xml index 0f66df840..9fe59abc6 100644 --- a/plugins/javatemplates/pom.xml +++ b/plugins/javatemplates/pom.xml @@ -25,7 +25,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-javatemplates-plugin diff --git a/plugins/jfreechart/pom.xml b/plugins/jfreechart/pom.xml index 0d242b66e..ee88bc120 100644 --- a/plugins/jfreechart/pom.xml +++ b/plugins/jfreechart/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-jfreechart-plugin diff --git a/plugins/json/pom.xml b/plugins/json/pom.xml index 11011aecc..3f62a3172 100644 --- a/plugins/json/pom.xml +++ b/plugins/json/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-json-plugin diff --git a/plugins/junit/pom.xml b/plugins/junit/pom.xml index 88b19a527..6b0b02d57 100644 --- a/plugins/junit/pom.xml +++ b/plugins/junit/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-junit-plugin diff --git a/plugins/osgi/pom.xml b/plugins/osgi/pom.xml index c2ba30f32..45787dcc0 100644 --- a/plugins/osgi/pom.xml +++ b/plugins/osgi/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-osgi-plugin diff --git a/plugins/oval/pom.xml b/plugins/oval/pom.xml index 06ee98187..ac39682a2 100644 --- a/plugins/oval/pom.xml +++ b/plugins/oval/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-oval-plugin diff --git a/plugins/pell-multipart/pom.xml b/plugins/pell-multipart/pom.xml index 0172cfb8f..4cce2037d 100644 --- a/plugins/pell-multipart/pom.xml +++ b/plugins/pell-multipart/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-pell-multipart-plugin diff --git a/plugins/plexus/pom.xml b/plugins/plexus/pom.xml index 39f29b296..6836cbd98 100644 --- a/plugins/plexus/pom.xml +++ b/plugins/plexus/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-plexus-plugin diff --git a/plugins/pom.xml b/plugins/pom.xml index 46cc7b0ba..27f729071 100644 --- a/plugins/pom.xml +++ b/plugins/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-parent - 6.4.0 + 6.5.0-SNAPSHOT struts2-plugins diff --git a/plugins/portlet-junit/pom.xml b/plugins/portlet-junit/pom.xml index 3a3122f57..bc7198e0e 100644 --- a/plugins/portlet-junit/pom.xml +++ b/plugins/portlet-junit/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-portlet-junit-plugin diff --git a/plugins/portlet-mocks/pom.xml b/plugins/portlet-mocks/pom.xml index a80ee2920..cd5dec22a 100644 --- a/plugins/portlet-mocks/pom.xml +++ b/plugins/portlet-mocks/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-portlet-mocks-plugin diff --git a/plugins/portlet-tiles/pom.xml b/plugins/portlet-tiles/pom.xml index cd36c9545..9fa3a28f4 100644 --- a/plugins/portlet-tiles/pom.xml +++ b/plugins/portlet-tiles/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-portlet-tiles-plugin diff --git a/plugins/portlet/pom.xml b/plugins/portlet/pom.xml index 30f97fbc9..99a5248bd 100644 --- a/plugins/portlet/pom.xml +++ b/plugins/portlet/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-portlet-plugin diff --git a/plugins/rest/pom.xml b/plugins/rest/pom.xml index 907d96d68..e56121eeb 100644 --- a/plugins/rest/pom.xml +++ b/plugins/rest/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-rest-plugin diff --git a/plugins/sitemesh/pom.xml b/plugins/sitemesh/pom.xml index 827cf6fdd..0c314cd59 100644 --- a/plugins/sitemesh/pom.xml +++ b/plugins/sitemesh/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-sitemesh-plugin diff --git a/plugins/spring/pom.xml b/plugins/spring/pom.xml index a5d438427..f34745f6f 100644 --- a/plugins/spring/pom.xml +++ b/plugins/spring/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-spring-plugin diff --git a/plugins/testng/pom.xml b/plugins/testng/pom.xml index aab465bd6..72317e345 100644 --- a/plugins/testng/pom.xml +++ b/plugins/testng/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-testng-plugin diff --git a/plugins/tiles/pom.xml b/plugins/tiles/pom.xml index 2d1dc99d0..618bc6a8c 100644 --- a/plugins/tiles/pom.xml +++ b/plugins/tiles/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-tiles-plugin diff --git a/plugins/velocity/pom.xml b/plugins/velocity/pom.xml index 51f5cde21..c7efbdc94 100644 --- a/plugins/velocity/pom.xml +++ b/plugins/velocity/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-velocity-plugin diff --git a/plugins/xslt/pom.xml b/plugins/xslt/pom.xml index 42e13d53f..2ddc88da3 100644 --- a/plugins/xslt/pom.xml +++ b/plugins/xslt/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-xslt-plugin diff --git a/pom.xml b/pom.xml index 04fa7359e..5be8da4e9 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ 4.0.0 struts2-parent - 6.4.0 + 6.5.0-SNAPSHOT pom Struts 2 https://struts.apache.org/ @@ -51,7 +51,7 @@ scm:git:https://gitbox.apache.org/repos/asf/struts.git scm:git:https://gitbox.apache.org/repos/asf/struts.git https://github.com/apache/struts/ - STRUTS_6_4_0 + STRUTS_6_3_0_1 @@ -104,7 +104,7 @@ UTF-8 - 2024-04-07T06:06:33Z + 2024-04-07T06:13:16Z 1.8 1.8 From a6d6d918fa6df82ff2682e904fc32abfad2e8c78 Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Sun, 7 Apr 2024 11:11:32 +0200 Subject: [PATCH 03/21] Reverts release and fixes issue with assembly --- apps/pom.xml | 2 +- apps/rest-showcase/pom.xml | 4 ++-- apps/showcase/pom.xml | 2 +- assembly/pom.xml | 4 +++- bom/pom.xml | 6 +++--- bundles/admin/pom.xml | 2 +- bundles/demo/pom.xml | 2 +- bundles/pom.xml | 2 +- core/pom.xml | 2 +- plugins/async/pom.xml | 2 +- plugins/bean-validation/pom.xml | 2 +- plugins/cdi/pom.xml | 2 +- plugins/config-browser/pom.xml | 2 +- plugins/convention/pom.xml | 2 +- plugins/dwr/pom.xml | 2 +- plugins/embeddedjsp/pom.xml | 2 +- plugins/gxp/pom.xml | 2 +- plugins/jasperreports/pom.xml | 2 +- plugins/javatemplates/pom.xml | 2 +- plugins/jfreechart/pom.xml | 2 +- plugins/json/pom.xml | 2 +- plugins/junit/pom.xml | 2 +- plugins/osgi/pom.xml | 2 +- plugins/oval/pom.xml | 2 +- plugins/pell-multipart/pom.xml | 2 +- plugins/plexus/pom.xml | 2 +- plugins/pom.xml | 2 +- plugins/portlet-junit/pom.xml | 2 +- plugins/portlet-mocks/pom.xml | 2 +- plugins/portlet-tiles/pom.xml | 2 +- plugins/portlet/pom.xml | 2 +- plugins/rest/pom.xml | 2 +- plugins/sitemesh/pom.xml | 2 +- plugins/spring/pom.xml | 2 +- plugins/testng/pom.xml | 2 +- plugins/tiles/pom.xml | 2 +- plugins/velocity/pom.xml | 2 +- plugins/xslt/pom.xml | 2 +- pom.xml | 13 +------------ 39 files changed, 44 insertions(+), 53 deletions(-) diff --git a/apps/pom.xml b/apps/pom.xml index 16c95aa5f..a1a187151 100644 --- a/apps/pom.xml +++ b/apps/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-parent - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-apps pom diff --git a/apps/rest-showcase/pom.xml b/apps/rest-showcase/pom.xml index 1961facbc..7c6f16051 100644 --- a/apps/rest-showcase/pom.xml +++ b/apps/rest-showcase/pom.xml @@ -24,12 +24,12 @@ org.apache.struts struts2-apps - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-rest-showcase war - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT Struts 2 Rest Showcase Webapp Struts 2 Rest Showcase Example diff --git a/apps/showcase/pom.xml b/apps/showcase/pom.xml index a1a9138cd..263c029f8 100644 --- a/apps/showcase/pom.xml +++ b/apps/showcase/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-apps - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-showcase diff --git a/assembly/pom.xml b/assembly/pom.xml index cc4c61fef..2b5d960c1 100644 --- a/assembly/pom.xml +++ b/assembly/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-parent - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-assembly @@ -104,7 +104,9 @@ + org.apache.maven.plugins maven-assembly-plugin + 3.6.0 make-assembly diff --git a/bom/pom.xml b/bom/pom.xml index a2bd291aa..c0b520f81 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -25,11 +25,11 @@ org.apache.struts struts2-parent - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-bom - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT pom Struts 2 Bill of Materials @@ -44,7 +44,7 @@ - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT true true diff --git a/bundles/admin/pom.xml b/bundles/admin/pom.xml index 1485e7f68..8c2c35a7d 100644 --- a/bundles/admin/pom.xml +++ b/bundles/admin/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-osgi-bundles - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-osgi-admin-bundle diff --git a/bundles/demo/pom.xml b/bundles/demo/pom.xml index ad74c9648..884bdce3a 100644 --- a/bundles/demo/pom.xml +++ b/bundles/demo/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-osgi-bundles - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-osgi-demo-bundle diff --git a/bundles/pom.xml b/bundles/pom.xml index ebd7adbf3..408947c8f 100755 --- a/bundles/pom.xml +++ b/bundles/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-parent - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-osgi-bundles diff --git a/core/pom.xml b/core/pom.xml index 3fcfaaf7b..26634e2d6 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-parent - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-core jar diff --git a/plugins/async/pom.xml b/plugins/async/pom.xml index 4eb41aa7f..2233f9e3c 100644 --- a/plugins/async/pom.xml +++ b/plugins/async/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-async-plugin diff --git a/plugins/bean-validation/pom.xml b/plugins/bean-validation/pom.xml index f789b404d..5609961a7 100644 --- a/plugins/bean-validation/pom.xml +++ b/plugins/bean-validation/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT 4.0.0 diff --git a/plugins/cdi/pom.xml b/plugins/cdi/pom.xml index 571dc169e..307f9af5a 100644 --- a/plugins/cdi/pom.xml +++ b/plugins/cdi/pom.xml @@ -25,7 +25,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-cdi-plugin diff --git a/plugins/config-browser/pom.xml b/plugins/config-browser/pom.xml index 0dd09fd9a..f82e8d2b7 100644 --- a/plugins/config-browser/pom.xml +++ b/plugins/config-browser/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-config-browser-plugin diff --git a/plugins/convention/pom.xml b/plugins/convention/pom.xml index 520c2f33a..99b114ae1 100644 --- a/plugins/convention/pom.xml +++ b/plugins/convention/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-convention-plugin diff --git a/plugins/dwr/pom.xml b/plugins/dwr/pom.xml index 1ed3c97ca..ac49be32d 100644 --- a/plugins/dwr/pom.xml +++ b/plugins/dwr/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-dwr-plugin diff --git a/plugins/embeddedjsp/pom.xml b/plugins/embeddedjsp/pom.xml index e18fe8f70..53d6b4be2 100644 --- a/plugins/embeddedjsp/pom.xml +++ b/plugins/embeddedjsp/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-embeddedjsp-plugin diff --git a/plugins/gxp/pom.xml b/plugins/gxp/pom.xml index 61f2a6a4c..daec7b139 100644 --- a/plugins/gxp/pom.xml +++ b/plugins/gxp/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-gxp-plugin diff --git a/plugins/jasperreports/pom.xml b/plugins/jasperreports/pom.xml index 23a4c49cf..59549ec7b 100644 --- a/plugins/jasperreports/pom.xml +++ b/plugins/jasperreports/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-jasperreports-plugin diff --git a/plugins/javatemplates/pom.xml b/plugins/javatemplates/pom.xml index 9fe59abc6..57d4d08a9 100644 --- a/plugins/javatemplates/pom.xml +++ b/plugins/javatemplates/pom.xml @@ -25,7 +25,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-javatemplates-plugin diff --git a/plugins/jfreechart/pom.xml b/plugins/jfreechart/pom.xml index ee88bc120..32d2f95de 100644 --- a/plugins/jfreechart/pom.xml +++ b/plugins/jfreechart/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-jfreechart-plugin diff --git a/plugins/json/pom.xml b/plugins/json/pom.xml index 3f62a3172..63772ea1a 100644 --- a/plugins/json/pom.xml +++ b/plugins/json/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-json-plugin diff --git a/plugins/junit/pom.xml b/plugins/junit/pom.xml index 6b0b02d57..51041e0a9 100644 --- a/plugins/junit/pom.xml +++ b/plugins/junit/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-junit-plugin diff --git a/plugins/osgi/pom.xml b/plugins/osgi/pom.xml index 45787dcc0..a5b4ed0ad 100644 --- a/plugins/osgi/pom.xml +++ b/plugins/osgi/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-osgi-plugin diff --git a/plugins/oval/pom.xml b/plugins/oval/pom.xml index ac39682a2..ad011b259 100644 --- a/plugins/oval/pom.xml +++ b/plugins/oval/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-oval-plugin diff --git a/plugins/pell-multipart/pom.xml b/plugins/pell-multipart/pom.xml index 4cce2037d..2b8cc9adc 100644 --- a/plugins/pell-multipart/pom.xml +++ b/plugins/pell-multipart/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-pell-multipart-plugin diff --git a/plugins/plexus/pom.xml b/plugins/plexus/pom.xml index 6836cbd98..698ef7573 100644 --- a/plugins/plexus/pom.xml +++ b/plugins/plexus/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-plexus-plugin diff --git a/plugins/pom.xml b/plugins/pom.xml index 27f729071..04b024304 100644 --- a/plugins/pom.xml +++ b/plugins/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-parent - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-plugins diff --git a/plugins/portlet-junit/pom.xml b/plugins/portlet-junit/pom.xml index bc7198e0e..45b6b94be 100644 --- a/plugins/portlet-junit/pom.xml +++ b/plugins/portlet-junit/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-portlet-junit-plugin diff --git a/plugins/portlet-mocks/pom.xml b/plugins/portlet-mocks/pom.xml index cd5dec22a..9b3a6081a 100644 --- a/plugins/portlet-mocks/pom.xml +++ b/plugins/portlet-mocks/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-portlet-mocks-plugin diff --git a/plugins/portlet-tiles/pom.xml b/plugins/portlet-tiles/pom.xml index 9fa3a28f4..c738a9b68 100644 --- a/plugins/portlet-tiles/pom.xml +++ b/plugins/portlet-tiles/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-portlet-tiles-plugin diff --git a/plugins/portlet/pom.xml b/plugins/portlet/pom.xml index 99a5248bd..8aed31c0b 100644 --- a/plugins/portlet/pom.xml +++ b/plugins/portlet/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-portlet-plugin diff --git a/plugins/rest/pom.xml b/plugins/rest/pom.xml index e56121eeb..a3187d1f4 100644 --- a/plugins/rest/pom.xml +++ b/plugins/rest/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-rest-plugin diff --git a/plugins/sitemesh/pom.xml b/plugins/sitemesh/pom.xml index 0c314cd59..c7bde8e9d 100644 --- a/plugins/sitemesh/pom.xml +++ b/plugins/sitemesh/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-sitemesh-plugin diff --git a/plugins/spring/pom.xml b/plugins/spring/pom.xml index f34745f6f..b546ba4ba 100644 --- a/plugins/spring/pom.xml +++ b/plugins/spring/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-spring-plugin diff --git a/plugins/testng/pom.xml b/plugins/testng/pom.xml index 72317e345..fb0154bff 100644 --- a/plugins/testng/pom.xml +++ b/plugins/testng/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-testng-plugin diff --git a/plugins/tiles/pom.xml b/plugins/tiles/pom.xml index 618bc6a8c..1a6caf2c1 100644 --- a/plugins/tiles/pom.xml +++ b/plugins/tiles/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-tiles-plugin diff --git a/plugins/velocity/pom.xml b/plugins/velocity/pom.xml index c7efbdc94..7ecfbb102 100644 --- a/plugins/velocity/pom.xml +++ b/plugins/velocity/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-velocity-plugin diff --git a/plugins/xslt/pom.xml b/plugins/xslt/pom.xml index 2ddc88da3..cde4a8cfb 100644 --- a/plugins/xslt/pom.xml +++ b/plugins/xslt/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT struts2-xslt-plugin diff --git a/pom.xml b/pom.xml index 5be8da4e9..ead06ba75 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ 4.0.0 struts2-parent - 6.5.0-SNAPSHOT + 6.4.0-SNAPSHOT pom Struts 2 https://struts.apache.org/ @@ -351,17 +351,6 @@ true - - org.apache.maven.plugins - maven-assembly-plugin - 3.6.0 - - true - true - assembly/out - assembly/work - - org.apache.maven.plugins maven-enforcer-plugin From 9c5c80d1731a13af0dc80fc3a04700f9a15dcf2a Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Sun, 7 Apr 2024 11:22:06 +0200 Subject: [PATCH 04/21] [maven-release-plugin] prepare release STRUTS_6_4_0 --- apps/pom.xml | 2 +- apps/rest-showcase/pom.xml | 4 ++-- apps/showcase/pom.xml | 2 +- assembly/pom.xml | 2 +- bom/pom.xml | 8 ++++---- bundles/admin/pom.xml | 2 +- bundles/demo/pom.xml | 2 +- bundles/pom.xml | 2 +- core/pom.xml | 2 +- plugins/async/pom.xml | 2 +- plugins/bean-validation/pom.xml | 2 +- plugins/cdi/pom.xml | 2 +- plugins/config-browser/pom.xml | 2 +- plugins/convention/pom.xml | 2 +- plugins/dwr/pom.xml | 2 +- plugins/embeddedjsp/pom.xml | 2 +- plugins/gxp/pom.xml | 2 +- plugins/jasperreports/pom.xml | 2 +- plugins/javatemplates/pom.xml | 2 +- plugins/jfreechart/pom.xml | 2 +- plugins/json/pom.xml | 2 +- plugins/junit/pom.xml | 2 +- plugins/osgi/pom.xml | 2 +- plugins/oval/pom.xml | 2 +- plugins/pell-multipart/pom.xml | 2 +- plugins/plexus/pom.xml | 2 +- plugins/pom.xml | 2 +- plugins/portlet-junit/pom.xml | 2 +- plugins/portlet-mocks/pom.xml | 2 +- plugins/portlet-tiles/pom.xml | 2 +- plugins/portlet/pom.xml | 2 +- plugins/rest/pom.xml | 2 +- plugins/sitemesh/pom.xml | 2 +- plugins/spring/pom.xml | 2 +- plugins/testng/pom.xml | 2 +- plugins/tiles/pom.xml | 2 +- plugins/velocity/pom.xml | 2 +- plugins/xslt/pom.xml | 2 +- pom.xml | 6 +++--- 39 files changed, 45 insertions(+), 45 deletions(-) diff --git a/apps/pom.xml b/apps/pom.xml index a1a187151..def718cbe 100644 --- a/apps/pom.xml +++ b/apps/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-parent - 6.4.0-SNAPSHOT + 6.4.0 struts2-apps pom diff --git a/apps/rest-showcase/pom.xml b/apps/rest-showcase/pom.xml index 7c6f16051..0af45ba83 100644 --- a/apps/rest-showcase/pom.xml +++ b/apps/rest-showcase/pom.xml @@ -24,12 +24,12 @@ org.apache.struts struts2-apps - 6.4.0-SNAPSHOT + 6.4.0 struts2-rest-showcase war - 6.4.0-SNAPSHOT + 6.4.0 Struts 2 Rest Showcase Webapp Struts 2 Rest Showcase Example diff --git a/apps/showcase/pom.xml b/apps/showcase/pom.xml index 263c029f8..e07d22dcd 100644 --- a/apps/showcase/pom.xml +++ b/apps/showcase/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-apps - 6.4.0-SNAPSHOT + 6.4.0 struts2-showcase diff --git a/assembly/pom.xml b/assembly/pom.xml index 2b5d960c1..c926fe998 100644 --- a/assembly/pom.xml +++ b/assembly/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-parent - 6.4.0-SNAPSHOT + 6.4.0 struts2-assembly diff --git a/bom/pom.xml b/bom/pom.xml index c0b520f81..b4fe9687a 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -25,11 +25,11 @@ org.apache.struts struts2-parent - 6.4.0-SNAPSHOT + 6.4.0 struts2-bom - 6.4.0-SNAPSHOT + 6.4.0 pom Struts 2 Bill of Materials @@ -44,7 +44,7 @@ - 6.4.0-SNAPSHOT + 6.4.0 true true @@ -190,7 +190,7 @@ - STRUTS_6_3_0_1 + STRUTS_6_4_0 scm:git:https://gitbox.apache.org/repos/asf/struts.git scm:git:https://gitbox.apache.org/repos/asf/struts.git https://github.com/apache/struts/ diff --git a/bundles/admin/pom.xml b/bundles/admin/pom.xml index 8c2c35a7d..0bd89bb80 100644 --- a/bundles/admin/pom.xml +++ b/bundles/admin/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-osgi-bundles - 6.4.0-SNAPSHOT + 6.4.0 struts2-osgi-admin-bundle diff --git a/bundles/demo/pom.xml b/bundles/demo/pom.xml index 884bdce3a..f2b8399da 100644 --- a/bundles/demo/pom.xml +++ b/bundles/demo/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-osgi-bundles - 6.4.0-SNAPSHOT + 6.4.0 struts2-osgi-demo-bundle diff --git a/bundles/pom.xml b/bundles/pom.xml index 408947c8f..bce21ff1d 100755 --- a/bundles/pom.xml +++ b/bundles/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-parent - 6.4.0-SNAPSHOT + 6.4.0 struts2-osgi-bundles diff --git a/core/pom.xml b/core/pom.xml index 26634e2d6..0af7d3ec7 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-parent - 6.4.0-SNAPSHOT + 6.4.0 struts2-core jar diff --git a/plugins/async/pom.xml b/plugins/async/pom.xml index 2233f9e3c..9b52a6532 100644 --- a/plugins/async/pom.xml +++ b/plugins/async/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-async-plugin diff --git a/plugins/bean-validation/pom.xml b/plugins/bean-validation/pom.xml index 5609961a7..166a2240a 100644 --- a/plugins/bean-validation/pom.xml +++ b/plugins/bean-validation/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 4.0.0 diff --git a/plugins/cdi/pom.xml b/plugins/cdi/pom.xml index 307f9af5a..b243cd475 100644 --- a/plugins/cdi/pom.xml +++ b/plugins/cdi/pom.xml @@ -25,7 +25,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-cdi-plugin diff --git a/plugins/config-browser/pom.xml b/plugins/config-browser/pom.xml index f82e8d2b7..bb7df8e63 100644 --- a/plugins/config-browser/pom.xml +++ b/plugins/config-browser/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-config-browser-plugin diff --git a/plugins/convention/pom.xml b/plugins/convention/pom.xml index 99b114ae1..5b6233f73 100644 --- a/plugins/convention/pom.xml +++ b/plugins/convention/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-convention-plugin diff --git a/plugins/dwr/pom.xml b/plugins/dwr/pom.xml index ac49be32d..eb7471f9a 100644 --- a/plugins/dwr/pom.xml +++ b/plugins/dwr/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-dwr-plugin diff --git a/plugins/embeddedjsp/pom.xml b/plugins/embeddedjsp/pom.xml index 53d6b4be2..c51f2571c 100644 --- a/plugins/embeddedjsp/pom.xml +++ b/plugins/embeddedjsp/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-embeddedjsp-plugin diff --git a/plugins/gxp/pom.xml b/plugins/gxp/pom.xml index daec7b139..f60e6343b 100644 --- a/plugins/gxp/pom.xml +++ b/plugins/gxp/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-gxp-plugin diff --git a/plugins/jasperreports/pom.xml b/plugins/jasperreports/pom.xml index 59549ec7b..64767d9ec 100644 --- a/plugins/jasperreports/pom.xml +++ b/plugins/jasperreports/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-jasperreports-plugin diff --git a/plugins/javatemplates/pom.xml b/plugins/javatemplates/pom.xml index 57d4d08a9..0f66df840 100644 --- a/plugins/javatemplates/pom.xml +++ b/plugins/javatemplates/pom.xml @@ -25,7 +25,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-javatemplates-plugin diff --git a/plugins/jfreechart/pom.xml b/plugins/jfreechart/pom.xml index 32d2f95de..0d242b66e 100644 --- a/plugins/jfreechart/pom.xml +++ b/plugins/jfreechart/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-jfreechart-plugin diff --git a/plugins/json/pom.xml b/plugins/json/pom.xml index 63772ea1a..11011aecc 100644 --- a/plugins/json/pom.xml +++ b/plugins/json/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-json-plugin diff --git a/plugins/junit/pom.xml b/plugins/junit/pom.xml index 51041e0a9..88b19a527 100644 --- a/plugins/junit/pom.xml +++ b/plugins/junit/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-junit-plugin diff --git a/plugins/osgi/pom.xml b/plugins/osgi/pom.xml index a5b4ed0ad..c2ba30f32 100644 --- a/plugins/osgi/pom.xml +++ b/plugins/osgi/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-osgi-plugin diff --git a/plugins/oval/pom.xml b/plugins/oval/pom.xml index ad011b259..06ee98187 100644 --- a/plugins/oval/pom.xml +++ b/plugins/oval/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-oval-plugin diff --git a/plugins/pell-multipart/pom.xml b/plugins/pell-multipart/pom.xml index 2b8cc9adc..0172cfb8f 100644 --- a/plugins/pell-multipart/pom.xml +++ b/plugins/pell-multipart/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-pell-multipart-plugin diff --git a/plugins/plexus/pom.xml b/plugins/plexus/pom.xml index 698ef7573..39f29b296 100644 --- a/plugins/plexus/pom.xml +++ b/plugins/plexus/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-plexus-plugin diff --git a/plugins/pom.xml b/plugins/pom.xml index 04b024304..46cc7b0ba 100644 --- a/plugins/pom.xml +++ b/plugins/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-parent - 6.4.0-SNAPSHOT + 6.4.0 struts2-plugins diff --git a/plugins/portlet-junit/pom.xml b/plugins/portlet-junit/pom.xml index 45b6b94be..3a3122f57 100644 --- a/plugins/portlet-junit/pom.xml +++ b/plugins/portlet-junit/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-portlet-junit-plugin diff --git a/plugins/portlet-mocks/pom.xml b/plugins/portlet-mocks/pom.xml index 9b3a6081a..a80ee2920 100644 --- a/plugins/portlet-mocks/pom.xml +++ b/plugins/portlet-mocks/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-portlet-mocks-plugin diff --git a/plugins/portlet-tiles/pom.xml b/plugins/portlet-tiles/pom.xml index c738a9b68..cd36c9545 100644 --- a/plugins/portlet-tiles/pom.xml +++ b/plugins/portlet-tiles/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-portlet-tiles-plugin diff --git a/plugins/portlet/pom.xml b/plugins/portlet/pom.xml index 8aed31c0b..30f97fbc9 100644 --- a/plugins/portlet/pom.xml +++ b/plugins/portlet/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-portlet-plugin diff --git a/plugins/rest/pom.xml b/plugins/rest/pom.xml index a3187d1f4..907d96d68 100644 --- a/plugins/rest/pom.xml +++ b/plugins/rest/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-rest-plugin diff --git a/plugins/sitemesh/pom.xml b/plugins/sitemesh/pom.xml index c7bde8e9d..827cf6fdd 100644 --- a/plugins/sitemesh/pom.xml +++ b/plugins/sitemesh/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-sitemesh-plugin diff --git a/plugins/spring/pom.xml b/plugins/spring/pom.xml index b546ba4ba..a5d438427 100644 --- a/plugins/spring/pom.xml +++ b/plugins/spring/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-spring-plugin diff --git a/plugins/testng/pom.xml b/plugins/testng/pom.xml index fb0154bff..aab465bd6 100644 --- a/plugins/testng/pom.xml +++ b/plugins/testng/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-testng-plugin diff --git a/plugins/tiles/pom.xml b/plugins/tiles/pom.xml index 1a6caf2c1..2d1dc99d0 100644 --- a/plugins/tiles/pom.xml +++ b/plugins/tiles/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-tiles-plugin diff --git a/plugins/velocity/pom.xml b/plugins/velocity/pom.xml index 7ecfbb102..51f5cde21 100644 --- a/plugins/velocity/pom.xml +++ b/plugins/velocity/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-velocity-plugin diff --git a/plugins/xslt/pom.xml b/plugins/xslt/pom.xml index cde4a8cfb..42e13d53f 100644 --- a/plugins/xslt/pom.xml +++ b/plugins/xslt/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0-SNAPSHOT + 6.4.0 struts2-xslt-plugin diff --git a/pom.xml b/pom.xml index ead06ba75..c055cff24 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ 4.0.0 struts2-parent - 6.4.0-SNAPSHOT + 6.4.0 pom Struts 2 https://struts.apache.org/ @@ -51,7 +51,7 @@ scm:git:https://gitbox.apache.org/repos/asf/struts.git scm:git:https://gitbox.apache.org/repos/asf/struts.git https://github.com/apache/struts/ - STRUTS_6_3_0_1 + STRUTS_6_4_0 @@ -104,7 +104,7 @@ UTF-8 - 2024-04-07T06:13:16Z + 2024-04-07T09:15:19Z 1.8 1.8 From c6d13f1016cb283405546b577a7a39d1ac3918b8 Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Sun, 7 Apr 2024 11:22:16 +0200 Subject: [PATCH 05/21] [maven-release-plugin] prepare for next development iteration --- apps/pom.xml | 2 +- apps/rest-showcase/pom.xml | 4 ++-- apps/showcase/pom.xml | 2 +- assembly/pom.xml | 2 +- bom/pom.xml | 8 ++++---- bundles/admin/pom.xml | 2 +- bundles/demo/pom.xml | 2 +- bundles/pom.xml | 2 +- core/pom.xml | 2 +- plugins/async/pom.xml | 2 +- plugins/bean-validation/pom.xml | 2 +- plugins/cdi/pom.xml | 2 +- plugins/config-browser/pom.xml | 2 +- plugins/convention/pom.xml | 2 +- plugins/dwr/pom.xml | 2 +- plugins/embeddedjsp/pom.xml | 2 +- plugins/gxp/pom.xml | 2 +- plugins/jasperreports/pom.xml | 2 +- plugins/javatemplates/pom.xml | 2 +- plugins/jfreechart/pom.xml | 2 +- plugins/json/pom.xml | 2 +- plugins/junit/pom.xml | 2 +- plugins/osgi/pom.xml | 2 +- plugins/oval/pom.xml | 2 +- plugins/pell-multipart/pom.xml | 2 +- plugins/plexus/pom.xml | 2 +- plugins/pom.xml | 2 +- plugins/portlet-junit/pom.xml | 2 +- plugins/portlet-mocks/pom.xml | 2 +- plugins/portlet-tiles/pom.xml | 2 +- plugins/portlet/pom.xml | 2 +- plugins/rest/pom.xml | 2 +- plugins/sitemesh/pom.xml | 2 +- plugins/spring/pom.xml | 2 +- plugins/testng/pom.xml | 2 +- plugins/tiles/pom.xml | 2 +- plugins/velocity/pom.xml | 2 +- plugins/xslt/pom.xml | 2 +- pom.xml | 6 +++--- 39 files changed, 45 insertions(+), 45 deletions(-) diff --git a/apps/pom.xml b/apps/pom.xml index def718cbe..16c95aa5f 100644 --- a/apps/pom.xml +++ b/apps/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-parent - 6.4.0 + 6.5.0-SNAPSHOT struts2-apps pom diff --git a/apps/rest-showcase/pom.xml b/apps/rest-showcase/pom.xml index 0af45ba83..1961facbc 100644 --- a/apps/rest-showcase/pom.xml +++ b/apps/rest-showcase/pom.xml @@ -24,12 +24,12 @@ org.apache.struts struts2-apps - 6.4.0 + 6.5.0-SNAPSHOT struts2-rest-showcase war - 6.4.0 + 6.5.0-SNAPSHOT Struts 2 Rest Showcase Webapp Struts 2 Rest Showcase Example diff --git a/apps/showcase/pom.xml b/apps/showcase/pom.xml index e07d22dcd..a1a9138cd 100644 --- a/apps/showcase/pom.xml +++ b/apps/showcase/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-apps - 6.4.0 + 6.5.0-SNAPSHOT struts2-showcase diff --git a/assembly/pom.xml b/assembly/pom.xml index c926fe998..c59792f80 100644 --- a/assembly/pom.xml +++ b/assembly/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-parent - 6.4.0 + 6.5.0-SNAPSHOT struts2-assembly diff --git a/bom/pom.xml b/bom/pom.xml index b4fe9687a..a2bd291aa 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -25,11 +25,11 @@ org.apache.struts struts2-parent - 6.4.0 + 6.5.0-SNAPSHOT struts2-bom - 6.4.0 + 6.5.0-SNAPSHOT pom Struts 2 Bill of Materials @@ -44,7 +44,7 @@ - 6.4.0 + 6.5.0-SNAPSHOT true true @@ -190,7 +190,7 @@ - STRUTS_6_4_0 + STRUTS_6_3_0_1 scm:git:https://gitbox.apache.org/repos/asf/struts.git scm:git:https://gitbox.apache.org/repos/asf/struts.git https://github.com/apache/struts/ diff --git a/bundles/admin/pom.xml b/bundles/admin/pom.xml index 0bd89bb80..1485e7f68 100644 --- a/bundles/admin/pom.xml +++ b/bundles/admin/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-osgi-bundles - 6.4.0 + 6.5.0-SNAPSHOT struts2-osgi-admin-bundle diff --git a/bundles/demo/pom.xml b/bundles/demo/pom.xml index f2b8399da..ad74c9648 100644 --- a/bundles/demo/pom.xml +++ b/bundles/demo/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-osgi-bundles - 6.4.0 + 6.5.0-SNAPSHOT struts2-osgi-demo-bundle diff --git a/bundles/pom.xml b/bundles/pom.xml index bce21ff1d..ebd7adbf3 100755 --- a/bundles/pom.xml +++ b/bundles/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-parent - 6.4.0 + 6.5.0-SNAPSHOT struts2-osgi-bundles diff --git a/core/pom.xml b/core/pom.xml index 0af7d3ec7..3fcfaaf7b 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-parent - 6.4.0 + 6.5.0-SNAPSHOT struts2-core jar diff --git a/plugins/async/pom.xml b/plugins/async/pom.xml index 9b52a6532..4eb41aa7f 100644 --- a/plugins/async/pom.xml +++ b/plugins/async/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-async-plugin diff --git a/plugins/bean-validation/pom.xml b/plugins/bean-validation/pom.xml index 166a2240a..f789b404d 100644 --- a/plugins/bean-validation/pom.xml +++ b/plugins/bean-validation/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT 4.0.0 diff --git a/plugins/cdi/pom.xml b/plugins/cdi/pom.xml index b243cd475..571dc169e 100644 --- a/plugins/cdi/pom.xml +++ b/plugins/cdi/pom.xml @@ -25,7 +25,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-cdi-plugin diff --git a/plugins/config-browser/pom.xml b/plugins/config-browser/pom.xml index bb7df8e63..0dd09fd9a 100644 --- a/plugins/config-browser/pom.xml +++ b/plugins/config-browser/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-config-browser-plugin diff --git a/plugins/convention/pom.xml b/plugins/convention/pom.xml index 5b6233f73..520c2f33a 100644 --- a/plugins/convention/pom.xml +++ b/plugins/convention/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-convention-plugin diff --git a/plugins/dwr/pom.xml b/plugins/dwr/pom.xml index eb7471f9a..1ed3c97ca 100644 --- a/plugins/dwr/pom.xml +++ b/plugins/dwr/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-dwr-plugin diff --git a/plugins/embeddedjsp/pom.xml b/plugins/embeddedjsp/pom.xml index c51f2571c..e18fe8f70 100644 --- a/plugins/embeddedjsp/pom.xml +++ b/plugins/embeddedjsp/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-embeddedjsp-plugin diff --git a/plugins/gxp/pom.xml b/plugins/gxp/pom.xml index f60e6343b..61f2a6a4c 100644 --- a/plugins/gxp/pom.xml +++ b/plugins/gxp/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-gxp-plugin diff --git a/plugins/jasperreports/pom.xml b/plugins/jasperreports/pom.xml index 64767d9ec..23a4c49cf 100644 --- a/plugins/jasperreports/pom.xml +++ b/plugins/jasperreports/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-jasperreports-plugin diff --git a/plugins/javatemplates/pom.xml b/plugins/javatemplates/pom.xml index 0f66df840..9fe59abc6 100644 --- a/plugins/javatemplates/pom.xml +++ b/plugins/javatemplates/pom.xml @@ -25,7 +25,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-javatemplates-plugin diff --git a/plugins/jfreechart/pom.xml b/plugins/jfreechart/pom.xml index 0d242b66e..ee88bc120 100644 --- a/plugins/jfreechart/pom.xml +++ b/plugins/jfreechart/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-jfreechart-plugin diff --git a/plugins/json/pom.xml b/plugins/json/pom.xml index 11011aecc..3f62a3172 100644 --- a/plugins/json/pom.xml +++ b/plugins/json/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-json-plugin diff --git a/plugins/junit/pom.xml b/plugins/junit/pom.xml index 88b19a527..6b0b02d57 100644 --- a/plugins/junit/pom.xml +++ b/plugins/junit/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-junit-plugin diff --git a/plugins/osgi/pom.xml b/plugins/osgi/pom.xml index c2ba30f32..45787dcc0 100644 --- a/plugins/osgi/pom.xml +++ b/plugins/osgi/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-osgi-plugin diff --git a/plugins/oval/pom.xml b/plugins/oval/pom.xml index 06ee98187..ac39682a2 100644 --- a/plugins/oval/pom.xml +++ b/plugins/oval/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-oval-plugin diff --git a/plugins/pell-multipart/pom.xml b/plugins/pell-multipart/pom.xml index 0172cfb8f..4cce2037d 100644 --- a/plugins/pell-multipart/pom.xml +++ b/plugins/pell-multipart/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-pell-multipart-plugin diff --git a/plugins/plexus/pom.xml b/plugins/plexus/pom.xml index 39f29b296..6836cbd98 100644 --- a/plugins/plexus/pom.xml +++ b/plugins/plexus/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-plexus-plugin diff --git a/plugins/pom.xml b/plugins/pom.xml index 46cc7b0ba..27f729071 100644 --- a/plugins/pom.xml +++ b/plugins/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-parent - 6.4.0 + 6.5.0-SNAPSHOT struts2-plugins diff --git a/plugins/portlet-junit/pom.xml b/plugins/portlet-junit/pom.xml index 3a3122f57..bc7198e0e 100644 --- a/plugins/portlet-junit/pom.xml +++ b/plugins/portlet-junit/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-portlet-junit-plugin diff --git a/plugins/portlet-mocks/pom.xml b/plugins/portlet-mocks/pom.xml index a80ee2920..cd5dec22a 100644 --- a/plugins/portlet-mocks/pom.xml +++ b/plugins/portlet-mocks/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-portlet-mocks-plugin diff --git a/plugins/portlet-tiles/pom.xml b/plugins/portlet-tiles/pom.xml index cd36c9545..9fa3a28f4 100644 --- a/plugins/portlet-tiles/pom.xml +++ b/plugins/portlet-tiles/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-portlet-tiles-plugin diff --git a/plugins/portlet/pom.xml b/plugins/portlet/pom.xml index 30f97fbc9..99a5248bd 100644 --- a/plugins/portlet/pom.xml +++ b/plugins/portlet/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-portlet-plugin diff --git a/plugins/rest/pom.xml b/plugins/rest/pom.xml index 907d96d68..e56121eeb 100644 --- a/plugins/rest/pom.xml +++ b/plugins/rest/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-rest-plugin diff --git a/plugins/sitemesh/pom.xml b/plugins/sitemesh/pom.xml index 827cf6fdd..0c314cd59 100644 --- a/plugins/sitemesh/pom.xml +++ b/plugins/sitemesh/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-sitemesh-plugin diff --git a/plugins/spring/pom.xml b/plugins/spring/pom.xml index a5d438427..f34745f6f 100644 --- a/plugins/spring/pom.xml +++ b/plugins/spring/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-spring-plugin diff --git a/plugins/testng/pom.xml b/plugins/testng/pom.xml index aab465bd6..72317e345 100644 --- a/plugins/testng/pom.xml +++ b/plugins/testng/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-testng-plugin diff --git a/plugins/tiles/pom.xml b/plugins/tiles/pom.xml index 2d1dc99d0..618bc6a8c 100644 --- a/plugins/tiles/pom.xml +++ b/plugins/tiles/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-tiles-plugin diff --git a/plugins/velocity/pom.xml b/plugins/velocity/pom.xml index 51f5cde21..c7efbdc94 100644 --- a/plugins/velocity/pom.xml +++ b/plugins/velocity/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-velocity-plugin diff --git a/plugins/xslt/pom.xml b/plugins/xslt/pom.xml index 42e13d53f..2ddc88da3 100644 --- a/plugins/xslt/pom.xml +++ b/plugins/xslt/pom.xml @@ -24,7 +24,7 @@ org.apache.struts struts2-plugins - 6.4.0 + 6.5.0-SNAPSHOT struts2-xslt-plugin diff --git a/pom.xml b/pom.xml index c055cff24..34490d5e3 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ 4.0.0 struts2-parent - 6.4.0 + 6.5.0-SNAPSHOT pom Struts 2 https://struts.apache.org/ @@ -51,7 +51,7 @@ scm:git:https://gitbox.apache.org/repos/asf/struts.git scm:git:https://gitbox.apache.org/repos/asf/struts.git https://github.com/apache/struts/ - STRUTS_6_4_0 + STRUTS_6_3_0_1 @@ -104,7 +104,7 @@ UTF-8 - 2024-04-07T09:15:19Z + 2024-04-07T09:22:16Z 1.8 1.8 From efa20426c9dca1bd5312debcb094a0df8308e0e6 Mon Sep 17 00:00:00 2001 From: Kusal Kithul-Godage Date: Mon, 8 Apr 2024 23:03:42 +1000 Subject: [PATCH 06/21] WW-5406 Ensure Action excluded patterns are reinjected --- .../apache/struts2/dispatcher/Dispatcher.java | 29 +++++++ .../struts2/dispatcher/InitOperations.java | 25 +----- .../struts2/dispatcher/PrepareOperations.java | 16 +--- .../filter/StrutsPrepareAndExecuteFilter.java | 6 +- .../filter/StrutsPrepareFilter.java | 6 +- .../struts2/dispatcher/DispatcherTest.java | 26 ++++++ .../dispatcher/InitOperationsTest.java | 86 ------------------- ...repareAndExecuteFilterIntegrationTest.java | 13 +-- 8 files changed, 70 insertions(+), 137 deletions(-) delete mode 100644 core/src/test/java/org/apache/struts2/dispatcher/InitOperationsTest.java diff --git a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java index 5bad0b4fe..af5bb5402 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java @@ -78,6 +78,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; +import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.List; @@ -88,6 +89,10 @@ import java.util.Set; import java.util.concurrent.CopyOnWriteArrayList; import java.util.regex.Pattern; +import static java.util.Collections.emptyList; +import static java.util.Collections.unmodifiableList; +import static java.util.stream.Collectors.toList; + /** * A utility class the actual dispatcher delegates most of its tasks to. Each instance * of the primary dispatcher holds an instance of this dispatcher to be shared for @@ -162,6 +167,9 @@ public class Dispatcher { */ private Pattern multipartValidationPattern = Pattern.compile(MULTIPART_FORM_DATA_REGEX); + private String actionExcludedPatternsSeparator = ","; + private List actionExcludedPatterns = emptyList(); + /** * Provide list of default configuration files. */ @@ -340,6 +348,27 @@ public class Dispatcher { this.multipartValidationPattern = Pattern.compile(multipartValidationRegex); } + @Inject(value = StrutsConstants.STRUTS_ACTION_EXCLUDE_PATTERN_SEPARATOR, required = false) + public void setActionExcludedPatternsSeparator(String separator) { + this.actionExcludedPatternsSeparator = separator; + } + + @Inject(value = StrutsConstants.STRUTS_ACTION_EXCLUDE_PATTERN, required = false) + public void setActionExcludedPatterns(String excludedPatterns) { + this.actionExcludedPatterns = buildExcludedPatternsList(excludedPatterns, actionExcludedPatternsSeparator); + } + + private static List buildExcludedPatternsList(String patterns, String separator) { + if (patterns == null || patterns.trim().isEmpty()) { + return emptyList(); + } + return unmodifiableList(Arrays.stream(patterns.split(separator)).map(String::trim).map(Pattern::compile).collect(toList())); + } + + public List getActionExcludedPatterns() { + return actionExcludedPatterns; + } + @Inject public void setValueStackFactory(ValueStackFactory valueStackFactory) { this.valueStackFactory = valueStackFactory; diff --git a/core/src/main/java/org/apache/struts2/dispatcher/InitOperations.java b/core/src/main/java/org/apache/struts2/dispatcher/InitOperations.java index 367aeba55..f5cf21a91 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/InitOperations.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/InitOperations.java @@ -19,10 +19,7 @@ package org.apache.struts2.dispatcher; import com.opensymphony.xwork2.ActionContext; -import org.apache.struts2.StrutsConstants; -import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -100,27 +97,11 @@ public class InitOperations { * @param dispatcher The dispatcher to check for exclude pattern configuration * @return a List of Patterns for request to exclude if apply, or null * @see org.apache.struts2.StrutsConstants#STRUTS_ACTION_EXCLUDE_PATTERN + * @deprecated since 6.4.0, use {@link Dispatcher#getActionExcludedPatterns()} instead. */ + @Deprecated public List buildExcludedPatternsList(Dispatcher dispatcher) { - String excludePatterns = dispatcher.getContainer().getInstance(String.class, StrutsConstants.STRUTS_ACTION_EXCLUDE_PATTERN); - String separator = dispatcher.getContainer().getInstance(String.class, StrutsConstants.STRUTS_ACTION_EXCLUDE_PATTERN_SEPARATOR); - if (separator == null) { - separator = ","; - } - return buildExcludedPatternsList(excludePatterns, separator); - } - - private List buildExcludedPatternsList(String patterns, String separator) { - if (null != patterns && patterns.trim().length() != 0) { - List list = new ArrayList<>(); - String[] tokens = patterns.split(separator); - for (String token : tokens) { - list.add(Pattern.compile(token.trim())); - } - return Collections.unmodifiableList(list); - } else { - return null; - } + return dispatcher.getActionExcludedPatterns(); } } diff --git a/core/src/main/java/org/apache/struts2/dispatcher/PrepareOperations.java b/core/src/main/java/org/apache/struts2/dispatcher/PrepareOperations.java index 6888c5b7a..f1ffd79f4 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/PrepareOperations.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/PrepareOperations.java @@ -32,8 +32,6 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.HashMap; -import java.util.List; -import java.util.regex.Pattern; /** * Contains preparation operations for a request before execution @@ -223,21 +221,11 @@ public class PrepareOperations { * Check whether the request matches a list of exclude patterns. * * @param request The request to check patterns against - * @param excludedPatterns list of patterns for exclusion - * * @return true if the request URI matches one of the given patterns */ - public boolean isUrlExcluded(HttpServletRequest request, List excludedPatterns) { - if (excludedPatterns == null) { - return false; - } + public boolean isUrlExcluded(HttpServletRequest request) { String uri = RequestUtils.getUri(request); - for (Pattern pattern : excludedPatterns) { - if (pattern.matcher(uri).matches()) { - return true; - } - } - return false; + return dispatcher.getActionExcludedPatterns().stream().anyMatch(pattern -> pattern.matcher(uri).matches()); } /** diff --git a/core/src/main/java/org/apache/struts2/dispatcher/filter/StrutsPrepareAndExecuteFilter.java b/core/src/main/java/org/apache/struts2/dispatcher/filter/StrutsPrepareAndExecuteFilter.java index e91a1b9a8..e6343f91d 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/filter/StrutsPrepareAndExecuteFilter.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/filter/StrutsPrepareAndExecuteFilter.java @@ -50,6 +50,8 @@ public class StrutsPrepareAndExecuteFilter implements StrutsStatics, Filter { protected PrepareOperations prepare; protected ExecuteOperations execute; + + @Deprecated protected List excludedPatterns; public void init(FilterConfig filterConfig) throws ServletException { @@ -62,7 +64,7 @@ public class StrutsPrepareAndExecuteFilter implements StrutsStatics, Filter { prepare = createPrepareOperations(dispatcher); execute = createExecuteOperations(dispatcher); - // Note: Currently, excluded patterns are not refreshed following an XWork config reload + this.excludedPatterns = init.buildExcludedPatternsList(dispatcher); postInit(dispatcher, filterConfig); @@ -121,7 +123,7 @@ public class StrutsPrepareAndExecuteFilter implements StrutsStatics, Filter { try { prepare.trackRecursion(request); String uri = RequestUtils.getUri(request); - if (prepare.isUrlExcluded(request, excludedPatterns)) { + if (prepare.isUrlExcluded(request)) { LOG.trace("Request: {} is excluded from handling by Struts, passing request to other filters", uri); chain.doFilter(request, response); } else { diff --git a/core/src/main/java/org/apache/struts2/dispatcher/filter/StrutsPrepareFilter.java b/core/src/main/java/org/apache/struts2/dispatcher/filter/StrutsPrepareFilter.java index 81dffb6a7..de90ac8cf 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/filter/StrutsPrepareFilter.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/filter/StrutsPrepareFilter.java @@ -43,6 +43,8 @@ public class StrutsPrepareFilter implements StrutsStatics, Filter { protected static final String REQUEST_EXCLUDED_FROM_ACTION_MAPPING = StrutsPrepareFilter.class.getName() + ".REQUEST_EXCLUDED_FROM_ACTION_MAPPING"; protected PrepareOperations prepare; + + @Deprecated protected List excludedPatterns; public void init(FilterConfig filterConfig) throws ServletException { @@ -53,7 +55,7 @@ public class StrutsPrepareFilter implements StrutsStatics, Filter { dispatcher = init.initDispatcher(config); prepare = createPrepareOperations(dispatcher); - // Note: Currently, excluded patterns are not refreshed following an XWork config reload + this.excludedPatterns = init.buildExcludedPatternsList(dispatcher); postInit(dispatcher, filterConfig); @@ -102,7 +104,7 @@ public class StrutsPrepareFilter implements StrutsStatics, Filter { boolean didWrap = false; try { prepare.trackRecursion(request); - if (prepare.isUrlExcluded(request, excludedPatterns)) { + if (prepare.isUrlExcluded(request)) { request.setAttribute(REQUEST_EXCLUDED_FROM_ACTION_MAPPING, true); } else { request.setAttribute(REQUEST_EXCLUDED_FROM_ACTION_MAPPING, false); diff --git a/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java b/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java index 888466720..54b2a96f1 100644 --- a/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java +++ b/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java @@ -54,10 +54,12 @@ import java.util.HashSet; import java.util.Locale; import java.util.Map; import java.util.Set; +import java.util.regex.Pattern; import static java.nio.charset.StandardCharsets.UTF_8; import static java.util.Collections.emptyMap; import static java.util.Collections.singletonMap; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; @@ -588,6 +590,30 @@ public class DispatcherTest extends StrutsJUnit4InternalTestCase { assertEquals(Locale.CANADA_FRENCH, dispatcher.getLocale(request)); } + @Test + public void testExcludePatterns() { + initDispatcher(singletonMap(StrutsConstants.STRUTS_ACTION_EXCLUDE_PATTERN, "/ns1/.*\\.json,/ns2/.*\\.json")); + + assertThat(dispatcher.getActionExcludedPatterns()).extracting(Pattern::toString).containsOnly( + "/ns1/.*\\.json", + "/ns2/.*\\.json" + ); + } + + @Test + public void testExcludePatternsUsingCustomSeparator() { + Map props = new HashMap<>(); + props.put(StrutsConstants.STRUTS_ACTION_EXCLUDE_PATTERN, "/ns1/[a-z]{1,10}.json///ns2/[a-z]{1,10}.json"); + props.put(StrutsConstants.STRUTS_ACTION_EXCLUDE_PATTERN_SEPARATOR, "//"); + + initDispatcher(props); + + assertThat(dispatcher.getActionExcludedPatterns()).extracting(Pattern::toString).containsOnly( + "/ns1/[a-z]{1,10}.json", + "/ns2/[a-z]{1,10}.json" + ); + } + public static Dispatcher spyDispatcherWithConfigurationManager(Dispatcher dispatcher, ConfigurationManager configurationManager) { Dispatcher spiedDispatcher = spy(dispatcher); doReturn(configurationManager).when(spiedDispatcher).createConfigurationManager(any()); diff --git a/core/src/test/java/org/apache/struts2/dispatcher/InitOperationsTest.java b/core/src/test/java/org/apache/struts2/dispatcher/InitOperationsTest.java deleted file mode 100644 index aa2aaeaa3..000000000 --- a/core/src/test/java/org/apache/struts2/dispatcher/InitOperationsTest.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * 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. - */ -package org.apache.struts2.dispatcher; - -import com.opensymphony.xwork2.config.ConfigurationException; -import com.opensymphony.xwork2.inject.ContainerBuilder; -import com.opensymphony.xwork2.util.location.LocatableProperties; -import org.apache.struts2.StrutsConstants; -import org.apache.struts2.StrutsInternalTestCase; -import org.apache.struts2.config.PropertiesConfigurationProvider; - -import java.util.List; -import java.util.regex.Pattern; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class InitOperationsTest extends StrutsInternalTestCase { - - public void testExcludePatterns() { - // given - loadConfigurationProviders(new PropertiesConfigurationProvider() { - @Override - public void register(ContainerBuilder builder, LocatableProperties props) throws ConfigurationException { - props.setProperty(StrutsConstants.STRUTS_ACTION_EXCLUDE_PATTERN, "/ns1/.*\\.json,/ns2/.*\\.json"); - } - }); - - Dispatcher mockDispatcher = mock(Dispatcher.class); - when(mockDispatcher.getContainer()).thenReturn(container); - - // when - InitOperations init = new InitOperations(); - List patterns = init.buildExcludedPatternsList(mockDispatcher); - - // then - assertThat(patterns).extracting(Pattern::toString).containsOnly( - "/ns1/.*\\.json", - "/ns2/.*\\.json" - ); - } - - public void testExcludePatternsUsingCustomSeparator() { - // given - loadConfigurationProviders(new PropertiesConfigurationProvider() { - @Override - public void register(ContainerBuilder builder, LocatableProperties props) throws ConfigurationException { - props.setProperty(StrutsConstants.STRUTS_ACTION_EXCLUDE_PATTERN, "/ns1/[a-z]{1,10}.json///ns2/[a-z]{1,10}.json"); - props.setProperty(StrutsConstants.STRUTS_ACTION_EXCLUDE_PATTERN_SEPARATOR, "//"); - } - }); - - Dispatcher mockDispatcher = mock(Dispatcher.class); - when(mockDispatcher.getContainer()).thenReturn(container); - - // when - InitOperations init = new InitOperations(); - - String separator = container.getInstance(String.class, StrutsConstants.STRUTS_ACTION_EXCLUDE_PATTERN_SEPARATOR); - List patterns = init.buildExcludedPatternsList(mockDispatcher); - - // then - assertThat(separator).isNotBlank().isEqualTo("//"); - assertThat(patterns).extracting(Pattern::toString).containsOnly( - "/ns1/[a-z]{1,10}.json", - "/ns2/[a-z]{1,10}.json" - ); - } -} diff --git a/core/src/test/java/org/apache/struts2/dispatcher/StrutsPrepareAndExecuteFilterIntegrationTest.java b/core/src/test/java/org/apache/struts2/dispatcher/StrutsPrepareAndExecuteFilterIntegrationTest.java index eb87235e1..c7d525722 100644 --- a/core/src/test/java/org/apache/struts2/dispatcher/StrutsPrepareAndExecuteFilterIntegrationTest.java +++ b/core/src/test/java/org/apache/struts2/dispatcher/StrutsPrepareAndExecuteFilterIntegrationTest.java @@ -26,13 +26,10 @@ import org.springframework.mock.web.MockFilterConfig; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; -import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import java.io.IOException; -import java.util.ArrayList; -import java.util.regex.Pattern; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -127,6 +124,7 @@ public class StrutsPrepareAndExecuteFilterIntegrationTest { MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); MockFilterConfig filterConfig = new MockFilterConfig(); + filterConfig.addInitParameter("struts.action.excludePattern", ".*hello.*"); MockFilterChain filterChain = new MockFilterChain() { @Override public void doFilter(ServletRequest req, ServletResponse res) { @@ -135,14 +133,7 @@ public class StrutsPrepareAndExecuteFilterIntegrationTest { }; request.setRequestURI("/hello.action"); - StrutsPrepareAndExecuteFilter filter = new StrutsPrepareAndExecuteFilter() { - @Override - public void init( FilterConfig filterConfig ) throws ServletException { - super.init(filterConfig); - excludedPatterns = new ArrayList<>(); - excludedPatterns.add(Pattern.compile(".*hello.*")); - } - }; + StrutsPrepareAndExecuteFilter filter = new StrutsPrepareAndExecuteFilter(); filter.init(filterConfig); filter.doFilter(request, response, filterChain); assertEquals(200, response.getStatus()); From 0074b70286afced6ace28da7f39349607bdb1588 Mon Sep 17 00:00:00 2001 From: Jeffery Xie Date: Tue, 9 Apr 2024 14:36:41 +1000 Subject: [PATCH 07/21] WW-5407 extend SecurityMemberAccess proxy detection to other proxies --- core/pom.xml | 9 +++ .../xwork2/ognl/DefaultOgnlCacheFactory.java | 8 ++- .../xwork2/ognl/SecurityMemberAccess.java | 20 ++++++- .../opensymphony/xwork2/util/ProxyUtil.java | 60 +++++++++++++++---- .../org/apache/struts2/StrutsConstants.java | 1 + .../config/entities/ConstantConfig.java | 10 ++++ .../ognl/SecurityMemberAccessProxyTest.java | 54 ++++++++++++----- 7 files changed, 135 insertions(+), 27 deletions(-) diff --git a/core/pom.xml b/core/pom.xml index 3fcfaaf7b..8165d191a 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -230,6 +230,15 @@ org.apache.commons commons-text + + + + org.hibernate + hibernate-core + 5.6.15.Final + true + + org.springframework spring-test diff --git a/core/src/main/java/com/opensymphony/xwork2/ognl/DefaultOgnlCacheFactory.java b/core/src/main/java/com/opensymphony/xwork2/ognl/DefaultOgnlCacheFactory.java index 29dc7fc7f..e503f4998 100644 --- a/core/src/main/java/com/opensymphony/xwork2/ognl/DefaultOgnlCacheFactory.java +++ b/core/src/main/java/com/opensymphony/xwork2/ognl/DefaultOgnlCacheFactory.java @@ -32,6 +32,7 @@ public class DefaultOgnlCacheFactory implements OgnlCacheFactory implements OgnlCacheFactory buildOgnlCache() { - return buildOgnlCache(getCacheMaxSize(), DEFAULT_INIT_CAPACITY, DEFAULT_LOAD_FACTOR, defaultCacheType); + return buildOgnlCache(getCacheMaxSize(), initialCapacity, DEFAULT_LOAD_FACTOR, defaultCacheType); } @Override diff --git a/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java b/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java index 510a65c60..b0ee1f21c 100644 --- a/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java +++ b/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java @@ -87,6 +87,7 @@ public class SecurityMemberAccess implements MemberAccess { private boolean enforceAllowlistEnabled = false; private Set> allowlistClasses = emptySet(); private Set allowlistPackageNames = emptySet(); + private boolean disallowProxyObjectAccess = false; private boolean disallowProxyMemberAccess = false; private boolean disallowDefaultPackageAccess = false; @@ -160,6 +161,11 @@ public class SecurityMemberAccess implements MemberAccess { } } + if (!checkProxyObjectAccess(target)) { + LOG.warn("Access to proxy is blocked! Target [{}], proxy class [{}]", target, target.getClass().getName()); + return false; + } + if (!checkProxyMemberAccess(target, member)) { LOG.warn("Access to proxy is blocked! Member class [{}] of target [{}], member [{}]", member.getDeclaringClass(), target, member); return false; @@ -286,7 +292,14 @@ public class SecurityMemberAccess implements MemberAccess { } /** - * @return {@code true} if member access is allowed + * @return {@code true} if proxy object access is allowed + */ + protected boolean checkProxyObjectAccess(Object target) { + return !(disallowProxyObjectAccess && ProxyUtil.isProxy(target)); + } + + /** + * @return {@code true} if proxy member access is allowed */ protected boolean checkProxyMemberAccess(Object target, Member member) { return !(disallowProxyMemberAccess && ProxyUtil.isProxyMember(member, target)); @@ -448,6 +461,11 @@ public class SecurityMemberAccess implements MemberAccess { this.allowlistPackageNames = toPackageNamesSet(commaDelimitedPackageNames); } + @Inject(value = StrutsConstants.STRUTS_DISALLOW_PROXY_OBJECT_ACCESS, required = false) + public void useDisallowProxyObjectAccess(String disallowProxyObjectAccess) { + this.disallowProxyObjectAccess = BooleanUtils.toBoolean(disallowProxyObjectAccess); + } + @Inject(value = StrutsConstants.STRUTS_DISALLOW_PROXY_MEMBER_ACCESS, required = false) public void useDisallowProxyMemberAccess(String disallowProxyMemberAccess) { this.disallowProxyMemberAccess = BooleanUtils.toBoolean(disallowProxyMemberAccess); diff --git a/core/src/main/java/com/opensymphony/xwork2/util/ProxyUtil.java b/core/src/main/java/com/opensymphony/xwork2/util/ProxyUtil.java index 9b0e7d4ea..aa8d23d76 100644 --- a/core/src/main/java/com/opensymphony/xwork2/util/ProxyUtil.java +++ b/core/src/main/java/com/opensymphony/xwork2/util/ProxyUtil.java @@ -18,13 +18,20 @@ */ package com.opensymphony.xwork2.util; +import com.opensymphony.xwork2.ognl.DefaultOgnlCacheFactory; +import com.opensymphony.xwork2.ognl.OgnlCache; +import com.opensymphony.xwork2.ognl.OgnlCacheFactory; import org.apache.commons.lang3.reflect.ConstructorUtils; import org.apache.commons.lang3.reflect.FieldUtils; import org.apache.commons.lang3.reflect.MethodUtils; +import org.hibernate.proxy.HibernateProxy; -import java.lang.reflect.*; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Member; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.lang.reflect.Proxy; /** * ProxyUtil @@ -38,11 +45,13 @@ public class ProxyUtil { private static final String SPRING_SPRINGPROXY_CLASS_NAME = "org.springframework.aop.SpringProxy"; private static final String SPRING_SINGLETONTARGETSOURCE_CLASS_NAME = "org.springframework.aop.target.SingletonTargetSource"; private static final String SPRING_TARGETCLASSAWARE_CLASS_NAME = "org.springframework.aop.TargetClassAware"; - - private static final Map, Boolean> isProxyCache = - new ConcurrentHashMap<>(256); - private static final Map isProxyMemberCache = - new ConcurrentHashMap<>(256); + private static final String HIBERNATE_HIBERNATEPROXY_CLASS_NAME = "org.hibernate.proxy.HibernateProxy"; + private static final int CACHE_MAX_SIZE = 10000; + private static final int CACHE_INITIAL_CAPACITY = 256; + private static final OgnlCache, Boolean> isProxyCache = new DefaultOgnlCacheFactory, Boolean>( + CACHE_MAX_SIZE, OgnlCacheFactory.CacheType.WTLFU, CACHE_INITIAL_CAPACITY).buildOgnlCache(); + private static final OgnlCache isProxyMemberCache = new DefaultOgnlCacheFactory( + CACHE_MAX_SIZE, OgnlCacheFactory.CacheType.WTLFU, CACHE_INITIAL_CAPACITY).buildOgnlCache(); /** * Determine the ultimate target class of the given instance, traversing @@ -75,7 +84,7 @@ public class ProxyUtil { return flag; } - boolean isProxy = isSpringAopProxy(object); + boolean isProxy = isSpringAopProxy(object) || isHibernateProxy(object); isProxyCache.put(clazz, isProxy); return isProxy; @@ -87,7 +96,7 @@ public class ProxyUtil { * @param object the object to check */ public static boolean isProxyMember(Member member, Object object) { - if (!Modifier.isStatic(member.getModifiers()) && !isProxy(object)) { + if (!Modifier.isStatic(member.getModifiers()) && !isProxy(object) && !isHibernateProxy(object)) { return false; } @@ -96,12 +105,41 @@ public class ProxyUtil { return flag; } - boolean isProxyMember = isSpringProxyMember(member); + boolean isProxyMember = isSpringProxyMember(member) || isHibernateProxyMember(member); isProxyMemberCache.put(member, isProxyMember); return isProxyMember; } + /** + * Check whether the given object is a Hibernate proxy. + * + * @param object the object to check + */ + public static boolean isHibernateProxy(Object object) { + try { + return HibernateProxy.class.isAssignableFrom(object.getClass()); + } catch (NoClassDefFoundError ignored) { + return false; + } + } + + /** + * Check whether the given member is a member of a Hibernate proxy. + * + * @param member the member to check + */ + public static boolean isHibernateProxyMember(Member member) { + try { + Class clazz = ClassLoaderUtil.loadClass(HIBERNATE_HIBERNATEPROXY_CLASS_NAME, ProxyUtil.class); + if (hasMember(clazz, member)) + return true; + } catch (ClassNotFoundException ignored) { + } + + return false; + } + /** * Determine the ultimate target class of the given spring bean instance, traversing * not only a top-level spring proxy but any number of nested spring proxies as well — diff --git a/core/src/main/java/org/apache/struts2/StrutsConstants.java b/core/src/main/java/org/apache/struts2/StrutsConstants.java index 3d0d1a00d..10d9fa5b7 100644 --- a/core/src/main/java/org/apache/struts2/StrutsConstants.java +++ b/core/src/main/java/org/apache/struts2/StrutsConstants.java @@ -480,6 +480,7 @@ public final class StrutsConstants { public static final String STRUTS_TEXT_PROVIDER_FACTORY = "struts.textProviderFactory"; public static final String STRUTS_LOCALIZED_TEXT_PROVIDER = "struts.localizedTextProvider"; + public static final String STRUTS_DISALLOW_PROXY_OBJECT_ACCESS = "struts.disallowProxyObjectAccess"; public static final String STRUTS_DISALLOW_PROXY_MEMBER_ACCESS = "struts.disallowProxyMemberAccess"; public static final String STRUTS_DISALLOW_DEFAULT_PACKAGE_ACCESS = "struts.disallowDefaultPackageAccess"; diff --git a/core/src/main/java/org/apache/struts2/config/entities/ConstantConfig.java b/core/src/main/java/org/apache/struts2/config/entities/ConstantConfig.java index 2b854243d..6106aad37 100644 --- a/core/src/main/java/org/apache/struts2/config/entities/ConstantConfig.java +++ b/core/src/main/java/org/apache/struts2/config/entities/ConstantConfig.java @@ -145,6 +145,7 @@ public class ConstantConfig { private String strictMethodInvocationMethodRegex; private BeanConfig textProviderFactory; private BeanConfig localizedTextProvider; + private Boolean disallowProxyObjectAccess; private Boolean disallowProxyMemberAccess; private Integer ognlAutoGrowthCollectionLimit; private String staticContentPath; @@ -279,6 +280,7 @@ public class ConstantConfig { map.put(StrutsConstants.STRUTS_SMI_METHOD_REGEX, strictMethodInvocationMethodRegex); map.put(StrutsConstants.STRUTS_TEXT_PROVIDER_FACTORY, beanConfToString(textProviderFactory)); map.put(StrutsConstants.STRUTS_LOCALIZED_TEXT_PROVIDER, beanConfToString(localizedTextProvider)); + map.put(StrutsConstants.STRUTS_DISALLOW_PROXY_OBJECT_ACCESS, Objects.toString(disallowProxyObjectAccess, null)); map.put(StrutsConstants.STRUTS_DISALLOW_PROXY_MEMBER_ACCESS, Objects.toString(disallowProxyMemberAccess, null)); map.put(StrutsConstants.STRUTS_OGNL_AUTO_GROWTH_COLLECTION_LIMIT, Objects.toString(ognlAutoGrowthCollectionLimit, null)); map.put(StrutsConstants.STRUTS_UI_STATIC_CONTENT_PATH, Objects.toString(staticContentPath, StaticContentLoader.DEFAULT_STATIC_CONTENT_PATH)); @@ -1360,6 +1362,14 @@ public class ConstantConfig { this.localizedTextProvider = new BeanConfig(clazz, clazz.getName()); } + public Boolean getDisallowProxyObjectAccess() { + return disallowProxyObjectAccess; + } + + public void setDisallowProxyObjectAccess(Boolean disallowProxyObjectAccess) { + this.disallowProxyObjectAccess = disallowProxyObjectAccess; + } + public Boolean getDisallowProxyMemberAccess() { return disallowProxyMemberAccess; } diff --git a/plugins/spring/src/test/java/com/opensymphony/xwork2/ognl/SecurityMemberAccessProxyTest.java b/plugins/spring/src/test/java/com/opensymphony/xwork2/ognl/SecurityMemberAccessProxyTest.java index 4d8046de9..3838ca9ae 100644 --- a/plugins/spring/src/test/java/com/opensymphony/xwork2/ognl/SecurityMemberAccessProxyTest.java +++ b/plugins/spring/src/test/java/com/opensymphony/xwork2/ognl/SecurityMemberAccessProxyTest.java @@ -29,6 +29,11 @@ import java.util.Map; public class SecurityMemberAccessProxyTest extends XWorkTestCase { private Map context; + private ActionProxy proxy; + private Map members; + private final SecurityMemberAccess sma = new SecurityMemberAccess(true); + private final String PROXY_MEMBER_METHOD = "isExposeProxy"; + private final String TEST_SUB_BEAN_CLASS_METHOD = "setIssueId"; @Override public void setUp() throws Exception { @@ -39,30 +44,51 @@ public class SecurityMemberAccessProxyTest extends XWorkTestCase { XmlConfigurationProvider provider = new StrutsXmlConfigurationProvider("com/opensymphony/xwork2/spring/actionContext-xwork.xml"); container.inject(provider); loadConfigurationProviders(provider); + + // Setup proxy object + setupProxy(); } public void testProxyAccessIsBlocked() throws Exception { - ActionProxy proxy = actionProxyFactory.createActionProxy(null, - "chaintoAOPedTestSubBeanAction", null, context); + members.values().forEach(member -> { + // When disallowProxyObjectAccess is set to true, and disallowProxyMemberAccess is set to false, the proxy access is blocked + sma.useDisallowProxyObjectAccess(Boolean.TRUE.toString()); + sma.useDisallowProxyMemberAccess(Boolean.FALSE.toString()); + assertFalse(sma.isAccessible(context, proxy.getAction(), member, "")); - SecurityMemberAccess sma = new SecurityMemberAccess(true); + // When disallowProxyObjectAccess is set to true, and disallowProxyMemberAccess is set to true, the proxy access is blocked + sma.useDisallowProxyObjectAccess(Boolean.TRUE.toString()); + sma.useDisallowProxyMemberAccess(Boolean.TRUE.toString()); + assertFalse(sma.isAccessible(context, proxy.getAction(), member, "")); + }); + + // When disallowProxyObjectAccess is set to false, and disallowProxyMemberAccess is set to true, the proxy member access is blocked + sma.useDisallowProxyObjectAccess(Boolean.FALSE.toString()); sma.useDisallowProxyMemberAccess(Boolean.TRUE.toString()); - - Member member = proxy.getAction().getClass().getMethod("isExposeProxy"); - - boolean accessible = sma.isAccessible(context, proxy.getAction(), member, ""); - assertFalse(accessible); + assertFalse(sma.isAccessible(context, proxy.getAction(), members.get(PROXY_MEMBER_METHOD), "")); } public void testProxyAccessIsAccessible() throws Exception { - ActionProxy proxy = actionProxyFactory.createActionProxy(null, - "chaintoAOPedTestSubBeanAction", null, context); + members.values().forEach(member -> { + // When disallowProxyObjectAccess is set to false, and disallowProxyMemberAccess is set to false, the proxy access is allowed + sma.useDisallowProxyObjectAccess(Boolean.FALSE.toString()); + sma.useDisallowProxyMemberAccess(Boolean.FALSE.toString()); + assertTrue(sma.isAccessible(context, proxy.getAction(), member, "")); + }); - SecurityMemberAccess sma = new SecurityMemberAccess(true); + // When disallowProxyObjectAccess is set to false, and disallowProxyMemberAccess is set to true, the original class member access is allowed + sma.useDisallowProxyObjectAccess(Boolean.FALSE.toString()); + sma.useDisallowProxyMemberAccess(Boolean.TRUE.toString()); + assertTrue(sma.isAccessible(context, proxy.getAction(), members.get(TEST_SUB_BEAN_CLASS_METHOD), "")); + } - Member member = proxy.getAction().getClass().getMethod("isExposeProxy"); + private void setupProxy() throws NoSuchMethodException { + proxy = actionProxyFactory.createActionProxy(null, "chaintoAOPedTestSubBeanAction", null, context); - boolean accessible = sma.isAccessible(context, proxy.getAction(), member, ""); - assertTrue(accessible); + members = new HashMap<>(); + // method is proxy member + members.put(PROXY_MEMBER_METHOD, proxy.getAction().getClass().getMethod(PROXY_MEMBER_METHOD)); + // method is not proxy member but from POJO class + members.put(TEST_SUB_BEAN_CLASS_METHOD, proxy.getAction().getClass().getMethod(TEST_SUB_BEAN_CLASS_METHOD, String.class)); } } From e2ec114577ec2368a03bd462cc060d30f610cb31 Mon Sep 17 00:00:00 2001 From: Jeffery Xie Date: Tue, 9 Apr 2024 15:33:10 +1000 Subject: [PATCH 08/21] WW-5408 add option to not fallback to empty namespace when unresolved --- .../opensymphony/xwork2/XWorkTestCase.java | 35 +++++++++++++++--- .../config/impl/DefaultConfiguration.java | 13 ++++--- .../org/apache/struts2/StrutsConstants.java | 2 ++ .../config/entities/ConstantConfig.java | 10 ++++++ .../xwork2/config/ConfigurationTest.java | 36 +++++++++++++++++++ .../struts2/views/jsp/ui/DebugTagTest.java | 22 +++--------- 6 files changed, 91 insertions(+), 27 deletions(-) diff --git a/core/src/main/java/com/opensymphony/xwork2/XWorkTestCase.java b/core/src/main/java/com/opensymphony/xwork2/XWorkTestCase.java index 88790fc6f..8a4695e57 100644 --- a/core/src/main/java/com/opensymphony/xwork2/XWorkTestCase.java +++ b/core/src/main/java/com/opensymphony/xwork2/XWorkTestCase.java @@ -36,6 +36,8 @@ import org.apache.commons.lang3.ClassUtils; import java.util.Locale; import java.util.Map; +import static java.util.Collections.singletonMap; + /** * Base JUnit TestCase to extend for XWork specific JUnit tests. Uses * the generic test setup for logic. @@ -56,9 +58,7 @@ public abstract class XWorkTestCase extends TestCase { @Override protected void setUp() throws Exception { configurationManager = XWorkTestCaseHelper.setUp(); - configuration = configurationManager.getConfiguration(); - container = configuration.getContainer(); - actionProxyFactory = container.getInstance(ActionProxyFactory.class); + reloadConfiguration(configurationManager); } @Override @@ -66,13 +66,17 @@ public abstract class XWorkTestCase extends TestCase { XWorkTestCaseHelper.tearDown(configurationManager); } - protected void loadConfigurationProviders(ConfigurationProvider... providers) { - configurationManager = XWorkTestCaseHelper.loadConfigurationProviders(configurationManager, providers); + private void reloadConfiguration(ConfigurationManager configurationManager) { configuration = configurationManager.getConfiguration(); container = configuration.getContainer(); actionProxyFactory = container.getInstance(ActionProxyFactory.class); } + protected void loadConfigurationProviders(ConfigurationProvider... providers) { + configurationManager = XWorkTestCaseHelper.loadConfigurationProviders(configurationManager, providers); + reloadConfiguration(configurationManager); + } + protected void loadButSet(Map properties) { loadConfigurationProviders(new StubConfigurationProvider() { @Override @@ -115,4 +119,25 @@ public abstract class XWorkTestCase extends TestCase { .getContextMap(); } + protected void setStrutsConstant(String constant, String value) { + setStrutsConstant(singletonMap(constant, value)); + } + + protected void setStrutsConstant(final Map overwritePropeties) { + configurationManager.addContainerProvider(new StubConfigurationProvider() { + @Override + public void register(ContainerBuilder builder, LocatableProperties props) throws ConfigurationException { + for (Map.Entry stringStringEntry : overwritePropeties.entrySet()) { + props.setProperty(stringStringEntry.getKey(), stringStringEntry.getValue(), null); + } + } + + @Override + public void destroy() { + } + }); + + configurationManager.reload(); + reloadConfiguration(configurationManager); + } } diff --git a/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java b/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java index 7bf0e7c77..c1851c5ea 100644 --- a/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java +++ b/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java @@ -459,9 +459,12 @@ public class DefaultConfiguration implements Configuration { boolean appendNamedParameters = Boolean.parseBoolean( container.getInstance(String.class, StrutsConstants.STRUTS_MATCHER_APPEND_NAMED_PARAMETERS) ); + boolean emptyNamespaceFallbackDisabled = Boolean.parseBoolean( + container.getInstance(String.class, StrutsConstants.STRUTS_DISABLE_EMPTY_NAMESPACE_FALLBACK) + ); return new RuntimeConfigurationImpl(Collections.unmodifiableMap(namespaceActionConfigs), - Collections.unmodifiableMap(namespaceConfigs), matcher, appendNamedParameters); + Collections.unmodifiableMap(namespaceConfigs), matcher, appendNamedParameters, emptyNamespaceFallbackDisabled); } private void setDefaultResults(Map results, PackageConfig packageContext) { @@ -536,14 +539,17 @@ public class DefaultConfiguration implements Configuration { private final Map namespaceActionConfigMatchers; private final NamespaceMatcher namespaceMatcher; private final Map namespaceConfigs; + private final boolean emptyNamespaceFallbackDisabled; public RuntimeConfigurationImpl(Map> namespaceActionConfigs, Map namespaceConfigs, PatternMatcher matcher, - boolean appendNamedParameters) + boolean appendNamedParameters, + boolean emptyNamespaceFallbackDisabled) { this.namespaceActionConfigs = namespaceActionConfigs; this.namespaceConfigs = namespaceConfigs; + this.emptyNamespaceFallbackDisabled = emptyNamespaceFallbackDisabled; this.namespaceActionConfigMatchers = new LinkedHashMap<>(); this.namespaceMatcher = new NamespaceMatcher(matcher, namespaceActionConfigs.keySet(), appendNamedParameters); @@ -583,11 +589,10 @@ public class DefaultConfiguration implements Configuration { } // fail over to empty namespace - if (config == null && StringUtils.isNotBlank(namespace)) { + if (config == null && StringUtils.isNotBlank(namespace) && ("/".equals(namespace) || !emptyNamespaceFallbackDisabled)) { config = findActionConfigInNamespace("", name); } - return config; } diff --git a/core/src/main/java/org/apache/struts2/StrutsConstants.java b/core/src/main/java/org/apache/struts2/StrutsConstants.java index 3d0d1a00d..b5e19a415 100644 --- a/core/src/main/java/org/apache/struts2/StrutsConstants.java +++ b/core/src/main/java/org/apache/struts2/StrutsConstants.java @@ -230,6 +230,8 @@ public final class StrutsConstants { public static final String STRUTS_XWORKCONVERTER = "struts.xworkConverter"; public static final String STRUTS_ALWAYS_SELECT_FULL_NAMESPACE = "struts.mapper.alwaysSelectFullNamespace"; + /** Disable fallback to empty namespace when request namespace didn't match any in action configuration */ + public static final String STRUTS_DISABLE_EMPTY_NAMESPACE_FALLBACK = "struts.disableActionConfigFallbackToEmptyNamespace"; /** The {@link com.opensymphony.xwork2.LocaleProviderFactory} implementation class */ public static final String STRUTS_LOCALE_PROVIDER_FACTORY = "struts.localeProviderFactory"; diff --git a/core/src/main/java/org/apache/struts2/config/entities/ConstantConfig.java b/core/src/main/java/org/apache/struts2/config/entities/ConstantConfig.java index 2b854243d..b7d462609 100644 --- a/core/src/main/java/org/apache/struts2/config/entities/ConstantConfig.java +++ b/core/src/main/java/org/apache/struts2/config/entities/ConstantConfig.java @@ -90,6 +90,7 @@ public class ConstantConfig { private Boolean freemarkerWrapperAltMap; private BeanConfig xworkConverter; private Boolean mapperAlwaysSelectFullNamespace; + private Boolean proxyDisableEmptyNamespaceFallback; private BeanConfig localeProviderFactory; private String mapperIdParameterName; private Boolean ognlAllowStaticFieldAccess; @@ -225,6 +226,7 @@ public class ConstantConfig { map.put(StrutsConstants.STRUTS_FREEMARKER_WRAPPER_ALT_MAP, Objects.toString(freemarkerWrapperAltMap, null)); map.put(StrutsConstants.STRUTS_XWORKCONVERTER, beanConfToString(xworkConverter)); map.put(StrutsConstants.STRUTS_ALWAYS_SELECT_FULL_NAMESPACE, Objects.toString(mapperAlwaysSelectFullNamespace, null)); + map.put(StrutsConstants.STRUTS_DISABLE_EMPTY_NAMESPACE_FALLBACK, Objects.toString(proxyDisableEmptyNamespaceFallback, null)); map.put(StrutsConstants.STRUTS_LOCALE_PROVIDER_FACTORY, beanConfToString(localeProviderFactory)); map.put(StrutsConstants.STRUTS_ID_PARAMETER_NAME, mapperIdParameterName); map.put(StrutsConstants.STRUTS_ALLOW_STATIC_FIELD_ACCESS, Objects.toString(ognlAllowStaticFieldAccess, null)); @@ -812,6 +814,14 @@ public class ConstantConfig { this.mapperAlwaysSelectFullNamespace = mapperAlwaysSelectFullNamespace; } + public Boolean getProxyDisableEmptyNamespaceFallback() { + return proxyDisableEmptyNamespaceFallback; + } + + public void setProxyDisableEmptyNamespaceFallback(Boolean proxyDisableEmptyNamespaceFallback) { + this.proxyDisableEmptyNamespaceFallback = proxyDisableEmptyNamespaceFallback; + } + public BeanConfig getLocaleProviderFactory() { return localeProviderFactory; } diff --git a/core/src/test/java/com/opensymphony/xwork2/config/ConfigurationTest.java b/core/src/test/java/com/opensymphony/xwork2/config/ConfigurationTest.java index b52b9d48c..8b9b36618 100644 --- a/core/src/test/java/com/opensymphony/xwork2/config/ConfigurationTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/config/ConfigurationTest.java @@ -31,6 +31,7 @@ import com.opensymphony.xwork2.inject.ContainerBuilder; import com.opensymphony.xwork2.mock.MockInterceptor; import com.opensymphony.xwork2.test.StubConfigurationProvider; import com.opensymphony.xwork2.util.location.LocatableProperties; +import org.apache.struts2.StrutsConstants; import org.apache.struts2.config.StrutsXmlConfigurationProvider; import org.apache.struts2.dispatcher.HttpParameters; @@ -239,6 +240,41 @@ public class ConfigurationTest extends XWorkTestCase { mockContainerProvider.verify(); } + public void testGetActionConfigFallbackToEmptyNamespaceWhenNamespaceDontMatchAndEmptyNamespaceFallbackIsNotDisabled() { + // struts.disableEmptyNamespaceFallback default to null, so it's not disabled + RuntimeConfiguration configuration = configurationManager.getConfiguration().getRuntimeConfiguration(); + + // check namespace that doesn't match fallback to empty namespace + ActionConfig actionConfig = configuration.getActionConfig("/something/that/is/not/in/the/namespace/config", "LazyFoo"); + assertEquals("default", actionConfig.getPackageName()); // fallback to empty namespace (package name is default) + assertEquals("LazyFoo", actionConfig.getName()); + + // check non-empty namespace and name in config still matches + assertNotNull(configuration.getActionConfig("includeTest", "Foo")); + + // check root namespace and name in config still matches + actionConfig = configuration.getActionConfig("/", "LazyFoo"); + assertEquals("default", actionConfig.getPackageName()); + assertEquals("LazyFoo", actionConfig.getName()); + } + + public void testGetActionConfigReturnNullWhenNamespaceDontMatchAndEmptyNamespaceFallbackIsDisabled() { + // set the struts.disableEmptyNamespaceFallback to true and reload the configuration + setStrutsConstant(StrutsConstants.STRUTS_DISABLE_EMPTY_NAMESPACE_FALLBACK, "true"); + RuntimeConfiguration configuration = configurationManager.getConfiguration().getRuntimeConfiguration(); + + // check namespace that doesn't match NOT fallback to empty namespace and return null + assertNull(configuration.getActionConfig("/something/that/is/not/in/the/namespace/config", "LazyFoo")); + + // check non-empty namespace and name in config still matches + assertNotNull(configuration.getActionConfig("includeTest", "Foo")); + + // check root namespace and name in config still matches + ActionConfig actionConfig = configuration.getActionConfig("/", "LazyFoo"); + assertEquals("default", actionConfig.getPackageName()); + assertEquals("LazyFoo", actionConfig.getName()); + } + public void testInitForPackageProviders() { loadConfigurationProviders(new StubConfigurationProvider() { diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/DebugTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/DebugTagTest.java index 7f4b54581..b7db51513 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/DebugTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/DebugTagTest.java @@ -217,23 +217,9 @@ public class DebugTagTest extends AbstractUITagTest { /** * Overwrite the Struts Constant and reload container */ - private void setStrutsConstant(final Map overwritePropeties) { - configurationManager.addContainerProvider(new StubConfigurationProvider() { - @Override - public boolean needsReload() { - return true; - } - - @Override - public void register(ContainerBuilder builder, LocatableProperties props) throws ConfigurationException { - for (Map.Entry stringStringEntry : overwritePropeties.entrySet()) { - props.setProperty(stringStringEntry.getKey(), stringStringEntry.getValue(), null); - } - } - }); - - configurationManager.reload(); - container = configurationManager.getConfiguration().getContainer(); + @Override + protected void setStrutsConstant(final Map overwritePropeties) { + super.setStrutsConstant(overwritePropeties); stack.getActionContext().withContainer(container); } -} \ No newline at end of file +} From 5f717cdb89920508b628d32ec5b34905e9baf42c Mon Sep 17 00:00:00 2001 From: Jeffery Xie Date: Wed, 10 Apr 2024 15:00:50 +1000 Subject: [PATCH 09/21] WW-5407 tweak ProxyUtil#isHibernateProxyMember to make it neat --- core/src/main/java/com/opensymphony/xwork2/util/ProxyUtil.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/src/main/java/com/opensymphony/xwork2/util/ProxyUtil.java b/core/src/main/java/com/opensymphony/xwork2/util/ProxyUtil.java index aa8d23d76..c169af20b 100644 --- a/core/src/main/java/com/opensymphony/xwork2/util/ProxyUtil.java +++ b/core/src/main/java/com/opensymphony/xwork2/util/ProxyUtil.java @@ -132,8 +132,7 @@ public class ProxyUtil { public static boolean isHibernateProxyMember(Member member) { try { Class clazz = ClassLoaderUtil.loadClass(HIBERNATE_HIBERNATEPROXY_CLASS_NAME, ProxyUtil.class); - if (hasMember(clazz, member)) - return true; + return hasMember(clazz, member); } catch (ClassNotFoundException ignored) { } From 1a6e2fef7a3f4489a833ca67fa880a0623c08b1a Mon Sep 17 00:00:00 2001 From: Kusal Kithul-Godage Date: Wed, 10 Apr 2024 15:55:02 +1000 Subject: [PATCH 10/21] WW-5406 Add deprecation JavaDocs --- .../dispatcher/filter/StrutsPrepareAndExecuteFilter.java | 4 ++++ .../apache/struts2/dispatcher/filter/StrutsPrepareFilter.java | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/core/src/main/java/org/apache/struts2/dispatcher/filter/StrutsPrepareAndExecuteFilter.java b/core/src/main/java/org/apache/struts2/dispatcher/filter/StrutsPrepareAndExecuteFilter.java index e6343f91d..bd1993f5a 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/filter/StrutsPrepareAndExecuteFilter.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/filter/StrutsPrepareAndExecuteFilter.java @@ -51,6 +51,10 @@ public class StrutsPrepareAndExecuteFilter implements StrutsStatics, Filter { protected PrepareOperations prepare; protected ExecuteOperations execute; + /** + * @deprecated since 6.4.0, use {@link Dispatcher#getActionExcludedPatterns} or + * {@link PrepareOperations#isUrlExcluded} instead. + */ @Deprecated protected List excludedPatterns; diff --git a/core/src/main/java/org/apache/struts2/dispatcher/filter/StrutsPrepareFilter.java b/core/src/main/java/org/apache/struts2/dispatcher/filter/StrutsPrepareFilter.java index de90ac8cf..9773b32b0 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/filter/StrutsPrepareFilter.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/filter/StrutsPrepareFilter.java @@ -44,6 +44,10 @@ public class StrutsPrepareFilter implements StrutsStatics, Filter { protected PrepareOperations prepare; + /** + * @deprecated since 6.4.0, use {@link Dispatcher#getActionExcludedPatterns} or + * {@link PrepareOperations#isUrlExcluded} instead. + */ @Deprecated protected List excludedPatterns; From ed0c7287d98e805d193ab638c06b50ac6ab174be Mon Sep 17 00:00:00 2001 From: Kusal Kithul-Godage Date: Wed, 10 Apr 2024 16:01:47 +1000 Subject: [PATCH 11/21] WW-5406 Revert breaking API change --- .../struts2/dispatcher/PrepareOperations.java | 14 ++++++++++++++ .../filter/StrutsPrepareAndExecuteFilter.java | 2 +- .../dispatcher/filter/StrutsPrepareFilter.java | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/apache/struts2/dispatcher/PrepareOperations.java b/core/src/main/java/org/apache/struts2/dispatcher/PrepareOperations.java index f1ffd79f4..ab4323526 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/PrepareOperations.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/PrepareOperations.java @@ -32,6 +32,8 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.HashMap; +import java.util.List; +import java.util.regex.Pattern; /** * Contains preparation operations for a request before execution @@ -228,6 +230,18 @@ public class PrepareOperations { return dispatcher.getActionExcludedPatterns().stream().anyMatch(pattern -> pattern.matcher(uri).matches()); } + /** + * @deprecated since 6.4.0, use {@link #isUrlExcluded(HttpServletRequest)} instead. + */ + @Deprecated + public boolean isUrlExcluded(HttpServletRequest request, List excludedPatterns) { + if (excludedPatterns == null) { + return false; + } + String uri = RequestUtils.getUri(request); + return excludedPatterns.stream().anyMatch(pattern -> pattern.matcher(uri).matches()); + } + /** * Set an override of the static devMode value. Do not set this via a * request parameter or any other unprotected method. Using a signed diff --git a/core/src/main/java/org/apache/struts2/dispatcher/filter/StrutsPrepareAndExecuteFilter.java b/core/src/main/java/org/apache/struts2/dispatcher/filter/StrutsPrepareAndExecuteFilter.java index bd1993f5a..bce6ec4bb 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/filter/StrutsPrepareAndExecuteFilter.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/filter/StrutsPrepareAndExecuteFilter.java @@ -53,7 +53,7 @@ public class StrutsPrepareAndExecuteFilter implements StrutsStatics, Filter { /** * @deprecated since 6.4.0, use {@link Dispatcher#getActionExcludedPatterns} or - * {@link PrepareOperations#isUrlExcluded} instead. + * {@link PrepareOperations#isUrlExcluded(HttpServletRequest)} instead. */ @Deprecated protected List excludedPatterns; diff --git a/core/src/main/java/org/apache/struts2/dispatcher/filter/StrutsPrepareFilter.java b/core/src/main/java/org/apache/struts2/dispatcher/filter/StrutsPrepareFilter.java index 9773b32b0..475a13969 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/filter/StrutsPrepareFilter.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/filter/StrutsPrepareFilter.java @@ -46,7 +46,7 @@ public class StrutsPrepareFilter implements StrutsStatics, Filter { /** * @deprecated since 6.4.0, use {@link Dispatcher#getActionExcludedPatterns} or - * {@link PrepareOperations#isUrlExcluded} instead. + * {@link PrepareOperations#isUrlExcluded(HttpServletRequest)} instead. */ @Deprecated protected List excludedPatterns; From f9f63275701bb3aeee9ec8b6278a1677bc3f20c4 Mon Sep 17 00:00:00 2001 From: Jeffery Xie Date: Wed, 10 Apr 2024 17:30:02 +1000 Subject: [PATCH 12/21] /WW-5408 rename struts.disableActionConfigFallbackToEmptyNamespace to struts.actionConfig.fallbackToEmptyNamespace --- .../xwork2/config/impl/DefaultConfiguration.java | 15 ++++++++------- .../java/org/apache/struts2/StrutsConstants.java | 4 ++-- .../struts2/config/entities/ConstantConfig.java | 12 ++++++------ .../xwork2/config/ConfigurationTest.java | 8 ++++---- 4 files changed, 20 insertions(+), 19 deletions(-) diff --git a/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java b/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java index c1851c5ea..b0d7be13e 100644 --- a/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java +++ b/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java @@ -120,6 +120,7 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.TreeMap; import java.util.TreeSet; @@ -459,12 +460,12 @@ public class DefaultConfiguration implements Configuration { boolean appendNamedParameters = Boolean.parseBoolean( container.getInstance(String.class, StrutsConstants.STRUTS_MATCHER_APPEND_NAMED_PARAMETERS) ); - boolean emptyNamespaceFallbackDisabled = Boolean.parseBoolean( - container.getInstance(String.class, StrutsConstants.STRUTS_DISABLE_EMPTY_NAMESPACE_FALLBACK) + boolean fallbackToEmptyNamespace = Boolean.parseBoolean( + Optional.ofNullable(container.getInstance(String.class, StrutsConstants.STRUTS_ACTION_CONFIG_FALLBACK_TO_EMPTY_NAMESPACE)).orElse("true") ); return new RuntimeConfigurationImpl(Collections.unmodifiableMap(namespaceActionConfigs), - Collections.unmodifiableMap(namespaceConfigs), matcher, appendNamedParameters, emptyNamespaceFallbackDisabled); + Collections.unmodifiableMap(namespaceConfigs), matcher, appendNamedParameters, fallbackToEmptyNamespace); } private void setDefaultResults(Map results, PackageConfig packageContext) { @@ -539,17 +540,17 @@ public class DefaultConfiguration implements Configuration { private final Map namespaceActionConfigMatchers; private final NamespaceMatcher namespaceMatcher; private final Map namespaceConfigs; - private final boolean emptyNamespaceFallbackDisabled; + private final boolean fallbackToEmptyNamespace; public RuntimeConfigurationImpl(Map> namespaceActionConfigs, Map namespaceConfigs, PatternMatcher matcher, boolean appendNamedParameters, - boolean emptyNamespaceFallbackDisabled) + boolean fallbackToEmptyNamespace) { this.namespaceActionConfigs = namespaceActionConfigs; this.namespaceConfigs = namespaceConfigs; - this.emptyNamespaceFallbackDisabled = emptyNamespaceFallbackDisabled; + this.fallbackToEmptyNamespace = fallbackToEmptyNamespace; this.namespaceActionConfigMatchers = new LinkedHashMap<>(); this.namespaceMatcher = new NamespaceMatcher(matcher, namespaceActionConfigs.keySet(), appendNamedParameters); @@ -589,7 +590,7 @@ public class DefaultConfiguration implements Configuration { } // fail over to empty namespace - if (config == null && StringUtils.isNotBlank(namespace) && ("/".equals(namespace) || !emptyNamespaceFallbackDisabled)) { + if (config == null && StringUtils.isNotBlank(namespace) && ("/".equals(namespace) || fallbackToEmptyNamespace)) { config = findActionConfigInNamespace("", name); } diff --git a/core/src/main/java/org/apache/struts2/StrutsConstants.java b/core/src/main/java/org/apache/struts2/StrutsConstants.java index b5e19a415..7a7f4b247 100644 --- a/core/src/main/java/org/apache/struts2/StrutsConstants.java +++ b/core/src/main/java/org/apache/struts2/StrutsConstants.java @@ -230,8 +230,8 @@ public final class StrutsConstants { public static final String STRUTS_XWORKCONVERTER = "struts.xworkConverter"; public static final String STRUTS_ALWAYS_SELECT_FULL_NAMESPACE = "struts.mapper.alwaysSelectFullNamespace"; - /** Disable fallback to empty namespace when request namespace didn't match any in action configuration */ - public static final String STRUTS_DISABLE_EMPTY_NAMESPACE_FALLBACK = "struts.disableActionConfigFallbackToEmptyNamespace"; + /** Fallback to empty namespace when request namespace didn't match any in action configuration */ + public static final String STRUTS_ACTION_CONFIG_FALLBACK_TO_EMPTY_NAMESPACE = "struts.actionConfig.fallbackToEmptyNamespace"; /** The {@link com.opensymphony.xwork2.LocaleProviderFactory} implementation class */ public static final String STRUTS_LOCALE_PROVIDER_FACTORY = "struts.localeProviderFactory"; diff --git a/core/src/main/java/org/apache/struts2/config/entities/ConstantConfig.java b/core/src/main/java/org/apache/struts2/config/entities/ConstantConfig.java index b7d462609..3f7484f16 100644 --- a/core/src/main/java/org/apache/struts2/config/entities/ConstantConfig.java +++ b/core/src/main/java/org/apache/struts2/config/entities/ConstantConfig.java @@ -90,7 +90,7 @@ public class ConstantConfig { private Boolean freemarkerWrapperAltMap; private BeanConfig xworkConverter; private Boolean mapperAlwaysSelectFullNamespace; - private Boolean proxyDisableEmptyNamespaceFallback; + private Boolean actionConfigFallbackToEmptyNamespace; private BeanConfig localeProviderFactory; private String mapperIdParameterName; private Boolean ognlAllowStaticFieldAccess; @@ -226,7 +226,7 @@ public class ConstantConfig { map.put(StrutsConstants.STRUTS_FREEMARKER_WRAPPER_ALT_MAP, Objects.toString(freemarkerWrapperAltMap, null)); map.put(StrutsConstants.STRUTS_XWORKCONVERTER, beanConfToString(xworkConverter)); map.put(StrutsConstants.STRUTS_ALWAYS_SELECT_FULL_NAMESPACE, Objects.toString(mapperAlwaysSelectFullNamespace, null)); - map.put(StrutsConstants.STRUTS_DISABLE_EMPTY_NAMESPACE_FALLBACK, Objects.toString(proxyDisableEmptyNamespaceFallback, null)); + map.put(StrutsConstants.STRUTS_ACTION_CONFIG_FALLBACK_TO_EMPTY_NAMESPACE, Objects.toString(actionConfigFallbackToEmptyNamespace, null)); map.put(StrutsConstants.STRUTS_LOCALE_PROVIDER_FACTORY, beanConfToString(localeProviderFactory)); map.put(StrutsConstants.STRUTS_ID_PARAMETER_NAME, mapperIdParameterName); map.put(StrutsConstants.STRUTS_ALLOW_STATIC_FIELD_ACCESS, Objects.toString(ognlAllowStaticFieldAccess, null)); @@ -814,12 +814,12 @@ public class ConstantConfig { this.mapperAlwaysSelectFullNamespace = mapperAlwaysSelectFullNamespace; } - public Boolean getProxyDisableEmptyNamespaceFallback() { - return proxyDisableEmptyNamespaceFallback; + public Boolean getActionConfigFallbackToEmptyNamespace() { + return actionConfigFallbackToEmptyNamespace; } - public void setProxyDisableEmptyNamespaceFallback(Boolean proxyDisableEmptyNamespaceFallback) { - this.proxyDisableEmptyNamespaceFallback = proxyDisableEmptyNamespaceFallback; + public void setActionConfigFallbackToEmptyNamespace(Boolean actionConfigFallbackToEmptyNamespace) { + this.actionConfigFallbackToEmptyNamespace = actionConfigFallbackToEmptyNamespace; } public BeanConfig getLocaleProviderFactory() { diff --git a/core/src/test/java/com/opensymphony/xwork2/config/ConfigurationTest.java b/core/src/test/java/com/opensymphony/xwork2/config/ConfigurationTest.java index 8b9b36618..520f8c240 100644 --- a/core/src/test/java/com/opensymphony/xwork2/config/ConfigurationTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/config/ConfigurationTest.java @@ -240,8 +240,8 @@ public class ConfigurationTest extends XWorkTestCase { mockContainerProvider.verify(); } - public void testGetActionConfigFallbackToEmptyNamespaceWhenNamespaceDontMatchAndEmptyNamespaceFallbackIsNotDisabled() { - // struts.disableEmptyNamespaceFallback default to null, so it's not disabled + public void testGetActionConfigFallbackToEmptyNamespaceWhenNamespaceDontMatchAndEmptyNamespaceFallbackIsEnabled() { + // struts.actionConfig.fallbackToEmptyNamespace default to true, so it is enabled RuntimeConfiguration configuration = configurationManager.getConfiguration().getRuntimeConfiguration(); // check namespace that doesn't match fallback to empty namespace @@ -259,8 +259,8 @@ public class ConfigurationTest extends XWorkTestCase { } public void testGetActionConfigReturnNullWhenNamespaceDontMatchAndEmptyNamespaceFallbackIsDisabled() { - // set the struts.disableEmptyNamespaceFallback to true and reload the configuration - setStrutsConstant(StrutsConstants.STRUTS_DISABLE_EMPTY_NAMESPACE_FALLBACK, "true"); + // set the struts.actionConfig.fallbackToEmptyNamespace to false and reload the configuration + setStrutsConstant(StrutsConstants.STRUTS_ACTION_CONFIG_FALLBACK_TO_EMPTY_NAMESPACE, "false"); RuntimeConfiguration configuration = configurationManager.getConfiguration().getRuntimeConfiguration(); // check namespace that doesn't match NOT fallback to empty namespace and return null From bf5f29132be6f4be9d3570a3fb2873a44d5f48f3 Mon Sep 17 00:00:00 2001 From: Jeffery Xie Date: Thu, 11 Apr 2024 12:44:53 +1000 Subject: [PATCH 13/21] WW-5409 introduce final attribute to package element which make them unextendable --- .../xwork2/config/entities/PackageConfig.java | 13 ++ .../XmlDocConfigurationProvider.java | 25 ++- .../StrutsXmlConfigurationProvider.java | 1 + core/src/main/resources/struts-6.4.0.dtd | 158 ++++++++++++++++++ .../XmlConfigurationProviderPackagesTest.java | 68 ++++++-- .../xwork-test-package-extends-final.xml | 37 ++++ .../providers/xwork-test-package-final.xml | 37 ++++ 7 files changed, 318 insertions(+), 21 deletions(-) create mode 100644 core/src/main/resources/struts-6.4.0.dtd create mode 100644 core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-package-extends-final.xml create mode 100644 core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-package-final.xml 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 9174e651b..eafff831d 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 @@ -47,6 +47,7 @@ public class PackageConfig extends Located implements Comparable, protected String name; protected String namespace = ""; protected boolean isAbstract = false; + protected boolean isFinal = false; // a final package is unextendable protected boolean needsRefresh; protected boolean strictMethodInvocation = true; @@ -69,6 +70,7 @@ public class PackageConfig extends Located implements Comparable, this.name = orig.name; this.namespace = orig.namespace; this.isAbstract = orig.isAbstract; + this.isFinal = orig.isFinal; this.needsRefresh = orig.needsRefresh; this.actionConfigs = new LinkedHashMap<>(orig.actionConfigs); this.globalResultConfigs = new LinkedHashMap<>(orig.globalResultConfigs); @@ -85,6 +87,10 @@ public class PackageConfig extends Located implements Comparable, return isAbstract; } + public boolean isFinal() { + return isFinal; + } + public Map getActionConfigs() { return actionConfigs; } @@ -360,6 +366,7 @@ public class PackageConfig extends Located implements Comparable, PackageConfig that = (PackageConfig) o; if (isAbstract != that.isAbstract) return false; + if (isFinal != that.isFinal) return false; if (needsRefresh != that.needsRefresh) return false; if (strictMethodInvocation != that.strictMethodInvocation) return false; if (actionConfigs != null ? !actionConfigs.equals(that.actionConfigs) : that.actionConfigs != null) @@ -404,6 +411,7 @@ public class PackageConfig extends Located implements Comparable, result = 31 * result + name.hashCode(); result = 31 * result + (namespace != null ? namespace.hashCode() : 0); result = 31 * result + (isAbstract ? 1 : 0); + result = 31 * result + (isFinal ? 1 : 0); result = 31 * result + (needsRefresh ? 1 : 0); result = 31 * result + (strictMethodInvocation ? 1 : 0); return result; @@ -453,6 +461,11 @@ public class PackageConfig extends Located implements Comparable, return this; } + public Builder isFinal(boolean isFinal) { + target.isFinal = isFinal; + return this; + } + public Builder defaultInterceptorRef(String name) { target.defaultInterceptorRef = name; return this; diff --git a/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlDocConfigurationProvider.java b/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlDocConfigurationProvider.java index cad52fb79..6de202460 100644 --- a/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlDocConfigurationProvider.java +++ b/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlDocConfigurationProvider.java @@ -603,8 +603,8 @@ public abstract class XmlDocConfigurationProvider implements ConfigurationProvid */ protected PackageConfig.Builder buildPackageContext(Element packageElement) { String parent = packageElement.getAttribute("extends"); - String abstractVal = packageElement.getAttribute("abstract"); - boolean isAbstract = parseBoolean(abstractVal); + boolean isAbstract = parseBoolean(packageElement.getAttribute("abstract")); + boolean isFinal = parseBoolean(packageElement.getAttribute("final")); String name = defaultString(packageElement.getAttribute("name")); String namespace = defaultString(packageElement.getAttribute("namespace")); @@ -617,6 +617,7 @@ public abstract class XmlDocConfigurationProvider implements ConfigurationProvid PackageConfig.Builder cfg = new PackageConfig.Builder(name) .namespace(namespace) .isAbstract(isAbstract) + .isFinal(isFinal) .strictMethodInvocation(strictDMI) .location(DomHelper.getLocationObject(packageElement)); @@ -627,17 +628,23 @@ public abstract class XmlDocConfigurationProvider implements ConfigurationProvid // has parents, let's look it up List parents = new ArrayList<>(); for (String parentPackageName : ConfigurationUtil.buildParentListFromString(parent)) { - if (configuration.getPackageConfigNames().contains(parentPackageName)) { - parents.add(configuration.getPackageConfig(parentPackageName)); - } else if (declaredPackages.containsKey(parentPackageName)) { - if (configuration.getPackageConfig(parentPackageName) == null) { - addPackage(declaredPackages.get(parentPackageName)); + boolean isParentPackageConfigDefined = false; + if (configuration.getPackageConfigNames().contains(parentPackageName)) { // parent package already added to configuration + isParentPackageConfigDefined = true; + } else if (declaredPackages.containsKey(parentPackageName)) { // parent package declared but yet added to configuration + addPackage(declaredPackages.get(parentPackageName)); + isParentPackageConfigDefined = true; + } + + if (isParentPackageConfigDefined) { + PackageConfig parentPackageConfig = configuration.getPackageConfig(parentPackageName); + if (parentPackageConfig.isFinal()) { + throw new ConfigurationException("Parent package is final and unextendable: " + parentPackageName); } - parents.add(configuration.getPackageConfig(parentPackageName)); + parents.add(parentPackageConfig); } else { throw new ConfigurationException("Parent package is not defined: " + parentPackageName); } - } if (parents.isEmpty()) { 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 9b62b3d59..d38b36cad 100644 --- a/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java +++ b/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java @@ -54,6 +54,7 @@ public class StrutsXmlConfigurationProvider extends XmlConfigurationProvider { put("-//Apache Software Foundation//DTD Struts Configuration 2.3//EN", "struts-2.3.dtd"); put("-//Apache Software Foundation//DTD Struts Configuration 2.5//EN", "struts-2.5.dtd"); put("-//Apache Software Foundation//DTD Struts Configuration 6.0//EN", "struts-6.0.dtd"); + put("-//Apache Software Foundation//DTD Struts Configuration 6.4.0//EN", "struts-6.4.0.dtd"); }}); private File baseDir = null; private final String filename; diff --git a/core/src/main/resources/struts-6.4.0.dtd b/core/src/main/resources/struts-6.4.0.dtd new file mode 100644 index 000000000..222c29d24 --- /dev/null +++ b/core/src/main/resources/struts-6.4.0.dtd @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderPackagesTest.java b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderPackagesTest.java index b39baecda..ed8910bfa 100644 --- a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderPackagesTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderPackagesTest.java @@ -36,10 +36,9 @@ import java.util.List; public class XmlConfigurationProviderPackagesTest extends ConfigurationTestBase { public void testBadInheritance() throws ConfigurationException { - final String filename = "com/opensymphony/xwork2/config/providers/xwork-test-bad-inheritance.xml"; ConfigurationProvider provider = null; try { - provider = buildConfigurationProvider(filename); + provider = buildConfigurationProvider(getXmlConfigFilePath("xwork-test-bad-inheritance.xml")); fail("Should have thrown a ConfigurationException"); provider.init(configuration); provider.loadPackages(); @@ -49,8 +48,7 @@ public class XmlConfigurationProviderPackagesTest extends ConfigurationTestBase } public void testBasicPackages() throws ConfigurationException { - final String filename = "com/opensymphony/xwork2/config/providers/xwork-test-basic-packages.xml"; - ConfigurationProvider provider = buildConfigurationProvider(filename); + ConfigurationProvider provider = buildConfigurationProvider(getXmlConfigFilePath("xwork-test-basic-packages.xml")); provider.init(configuration); provider.loadPackages(); @@ -70,8 +68,7 @@ public class XmlConfigurationProviderPackagesTest extends ConfigurationTestBase } public void testDefaultPackage() throws ConfigurationException { - final String filename = "com/opensymphony/xwork2/config/providers/xwork-test-default-package.xml"; - ConfigurationProvider provider = buildConfigurationProvider(filename); + ConfigurationProvider provider = buildConfigurationProvider(getXmlConfigFilePath("xwork-test-default-package.xml")); provider.init(configuration); provider.loadPackages(); @@ -84,8 +81,7 @@ public class XmlConfigurationProviderPackagesTest extends ConfigurationTestBase } public void testPackageInheritance() throws ConfigurationException { - final String filename = "com/opensymphony/xwork2/config/providers/xwork-test-package-inheritance.xml"; - ConfigurationProvider provider = buildConfigurationProvider(filename); + ConfigurationProvider provider = buildConfigurationProvider(getXmlConfigFilePath("xwork-test-package-inheritance.xml")); provider.init(configuration); provider.loadPackages(); @@ -111,7 +107,7 @@ public class XmlConfigurationProviderPackagesTest extends ConfigurationTestBase assertTrue(multipleParents.contains(defaultPackage)); assertTrue(multipleParents.contains(abstractPackage)); assertTrue(multipleParents.contains(singlePackage)); - + PackageConfig parentBelow = configuration.getPackageConfig("testParentBelow"); assertEquals(1, parentBelow.getParents().size()); List parentBelowParents = parentBelow.getParents(); @@ -129,7 +125,7 @@ public class XmlConfigurationProviderPackagesTest extends ConfigurationTestBase assertNull(runtimeConfiguration.getActionConfig("/single", "abstract")); assertNotNull(runtimeConfiguration.getActionConfig("/single", "single")); assertNull(runtimeConfiguration.getActionConfig("/single", "multiple")); - + assertNotNull(runtimeConfiguration.getActionConfig("/parentBelow", "default")); assertNotNull(runtimeConfiguration.getActionConfig("/parentBelow", "abstract")); assertNotNull(runtimeConfiguration.getActionConfig("/parentBelow", "single")); @@ -138,13 +134,57 @@ public class XmlConfigurationProviderPackagesTest extends ConfigurationTestBase } + public void testPackageWithFinalAttributeLoads() throws ConfigurationException { + ConfigurationProvider provider = buildConfigurationProvider(getXmlConfigFilePath("xwork-test-package-final.xml")); + + provider.init(configuration); + provider.loadPackages(); + + // test expectations + assertEquals(3, configuration.getPackageConfigs().size()); + PackageConfig defaultPackage = configuration.getPackageConfig("default"); + assertNotNull(defaultPackage); + assertEquals("default", defaultPackage.getName()); + + // final package extends default + PackageConfig finalPackage = configuration.getPackageConfig("finalPackage"); + assertNotNull(finalPackage); + assertEquals("finalPackage", finalPackage.getName()); + assertEquals(1, finalPackage.getParents().size()); + assertEquals(defaultPackage, finalPackage.getParents().get(0)); + + // normal package extends default + PackageConfig normalPackage = configuration.getPackageConfig("normalPackage"); + assertNotNull(normalPackage); + assertEquals("normalPackage", normalPackage.getName()); + assertEquals(1, normalPackage.getParents().size()); + assertEquals(defaultPackage, normalPackage.getParents().get(0)); + + configurationManager.addContainerProvider(provider); + configurationManager.reload(); + + RuntimeConfiguration runtimeConfiguration = configurationManager.getConfiguration().getRuntimeConfiguration(); + assertNotNull(runtimeConfiguration.getActionConfig("/final", "default")); + assertNotNull(runtimeConfiguration.getActionConfig("/final", "actionFinal")); + + assertNotNull(runtimeConfiguration.getActionConfig("/normal", "default")); + assertNotNull(runtimeConfiguration.getActionConfig("/normal", "actionNormal")); + } + + public void testExtendsFinalPackageThrowsConfigurationException() throws ConfigurationException { + try { + buildConfigurationProvider(getXmlConfigFilePath("xwork-test-package-extends-final.xml")); + } catch (ConfigurationException e) { + assertEquals("Parent package is final and unextendable: parentLevelTwo", e.getMessage()); + } + } + public void testDefaultClassRef() throws ConfigurationException { - final String filename = "com/opensymphony/xwork2/config/providers/xwork-test-defaultclassref-package.xml"; final String hasDefaultClassRefPkgName = "hasDefaultClassRef"; final String noDefaultClassRefPkgName = "noDefaultClassRef"; final String testDefaultClassRef = "com.opensymphony.xwork2.ActionSupport"; - ConfigurationProvider provider = buildConfigurationProvider(filename); + ConfigurationProvider provider = buildConfigurationProvider(getXmlConfigFilePath("xwork-test-defaultclassref-package.xml")); provider.init(configuration); // setup our expectations @@ -157,4 +197,8 @@ public class XmlConfigurationProviderPackagesTest extends ConfigurationTestBase assertEquals(expectedDefaultClassRefPackage, configuration.getPackageConfig(hasDefaultClassRefPkgName)); assertEquals(expectedNoDefaultClassRefPackage, configuration.getPackageConfig(noDefaultClassRefPkgName)); } + + private String getXmlConfigFilePath(String fileName) { + return "com/opensymphony/xwork2/config/providers/" + fileName; + } } diff --git a/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-package-extends-final.xml b/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-package-extends-final.xml new file mode 100644 index 000000000..6f01c8d15 --- /dev/null +++ b/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-package-extends-final.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + diff --git a/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-package-final.xml b/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-package-final.xml new file mode 100644 index 000000000..8fd96bcc1 --- /dev/null +++ b/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-package-final.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + From 1d51d00ecbf6e6573914bc04a3ed2870179b9640 Mon Sep 17 00:00:00 2001 From: Jeffery Xie Date: Thu, 11 Apr 2024 14:57:57 +1000 Subject: [PATCH 14/21] WW-5408 add struts.actionConfig.fallbackToEmptyNamespace as true in default.properties --- .../xwork2/config/impl/DefaultConfiguration.java | 6 +++++- .../main/resources/org/apache/struts2/default.properties | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java b/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java index b0d7be13e..7c725e15b 100644 --- a/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java +++ b/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java @@ -590,13 +590,17 @@ public class DefaultConfiguration implements Configuration { } // fail over to empty namespace - if (config == null && StringUtils.isNotBlank(namespace) && ("/".equals(namespace) || fallbackToEmptyNamespace)) { + if (config == null && shouldFallbackToEmptyNamespace(namespace)) { config = findActionConfigInNamespace("", name); } return config; } + private boolean shouldFallbackToEmptyNamespace(String namespace) { + return StringUtils.isNotBlank(namespace) && ("/".equals(namespace) || fallbackToEmptyNamespace); + } + private ActionConfig findActionConfigInNamespace(String namespace, String name) { ActionConfig config = null; if (namespace == null) { diff --git a/core/src/main/resources/org/apache/struts2/default.properties b/core/src/main/resources/org/apache/struts2/default.properties index 96c5459fe..8b7226a89 100644 --- a/core/src/main/resources/org/apache/struts2/default.properties +++ b/core/src/main/resources/org/apache/struts2/default.properties @@ -215,6 +215,9 @@ struts.xslt.nocache=false ### Whether to always select the namespace to be everything before the last slash or not struts.mapper.alwaysSelectFullNamespace=false +### Whether to fallback to empty namespace when request namespace does not match any in configuration +struts.actionConfig.fallbackToEmptyNamespace=true + ### Whether to allow static field access in OGNL expressions or not struts.ognl.allowStaticFieldAccess=true From 4088f2ee2b9d39bf7e61f88f4cd6c2919ccf066a Mon Sep 17 00:00:00 2001 From: Jeffery Xie Date: Thu, 11 Apr 2024 15:07:25 +1000 Subject: [PATCH 15/21] WW-5409 update new dtd from 6.4.0 to 6.5.0 --- .../apache/struts2/config/StrutsXmlConfigurationProvider.java | 2 +- .../src/main/resources/{struts-6.4.0.dtd => struts-6.5.0.dtd} | 4 ++-- .../config/providers/xwork-test-package-extends-final.xml | 4 ++-- .../xwork2/config/providers/xwork-test-package-final.xml | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) rename core/src/main/resources/{struts-6.4.0.dtd => struts-6.5.0.dtd} (96%) 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 d38b36cad..f5a516dfa 100644 --- a/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java +++ b/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java @@ -54,7 +54,7 @@ public class StrutsXmlConfigurationProvider extends XmlConfigurationProvider { put("-//Apache Software Foundation//DTD Struts Configuration 2.3//EN", "struts-2.3.dtd"); put("-//Apache Software Foundation//DTD Struts Configuration 2.5//EN", "struts-2.5.dtd"); put("-//Apache Software Foundation//DTD Struts Configuration 6.0//EN", "struts-6.0.dtd"); - put("-//Apache Software Foundation//DTD Struts Configuration 6.4.0//EN", "struts-6.4.0.dtd"); + put("-//Apache Software Foundation//DTD Struts Configuration 6.5.0//EN", "struts-6.5.0.dtd"); }}); private File baseDir = null; private final String filename; diff --git a/core/src/main/resources/struts-6.4.0.dtd b/core/src/main/resources/struts-6.5.0.dtd similarity index 96% rename from core/src/main/resources/struts-6.4.0.dtd rename to core/src/main/resources/struts-6.5.0.dtd index 222c29d24..bf1b534a9 100644 --- a/core/src/main/resources/struts-6.4.0.dtd +++ b/core/src/main/resources/struts-6.5.0.dtd @@ -26,8 +26,8 @@ Use the following DOCTYPE + "-//Apache Software Foundation//DTD Struts Configuration 6.5.0//EN" + "https://struts.apache.org/dtds/struts-6.5.0.dtd"> --> diff --git a/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-package-extends-final.xml b/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-package-extends-final.xml index 6f01c8d15..28b9526b9 100644 --- a/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-package-extends-final.xml +++ b/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-package-extends-final.xml @@ -20,8 +20,8 @@ */ --> + "-//Apache Software Foundation//DTD Struts Configuration 6.5.0//EN" + "struts-6.5.0.dtd"> diff --git a/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-package-final.xml b/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-package-final.xml index 8fd96bcc1..12ac2b4fa 100644 --- a/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-package-final.xml +++ b/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-package-final.xml @@ -20,8 +20,8 @@ */ --> + "-//Apache Software Foundation//DTD Struts Configuration 6.5.0//EN" + "struts-6.5.0.dtd"> From 85783a0cc757ae0c526e0b5ba7cc31f3a5b5a87e Mon Sep 17 00:00:00 2001 From: Jeffery Xie Date: Fri, 12 Apr 2024 16:04:34 +1000 Subject: [PATCH 16/21] WW-5409 rename 6.5.0.dtd to 6.5.dtd to follow the naming pattern --- .../apache/struts2/config/StrutsXmlConfigurationProvider.java | 2 +- core/src/main/resources/{struts-6.5.0.dtd => struts-6.5.dtd} | 4 ++-- .../config/providers/xwork-test-package-extends-final.xml | 4 ++-- .../xwork2/config/providers/xwork-test-package-final.xml | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) rename core/src/main/resources/{struts-6.5.0.dtd => struts-6.5.dtd} (98%) 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 f5a516dfa..9c1b3948c 100644 --- a/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java +++ b/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java @@ -54,7 +54,7 @@ public class StrutsXmlConfigurationProvider extends XmlConfigurationProvider { put("-//Apache Software Foundation//DTD Struts Configuration 2.3//EN", "struts-2.3.dtd"); put("-//Apache Software Foundation//DTD Struts Configuration 2.5//EN", "struts-2.5.dtd"); put("-//Apache Software Foundation//DTD Struts Configuration 6.0//EN", "struts-6.0.dtd"); - put("-//Apache Software Foundation//DTD Struts Configuration 6.5.0//EN", "struts-6.5.0.dtd"); + put("-//Apache Software Foundation//DTD Struts Configuration 6.5//EN", "struts-6.5.dtd"); }}); private File baseDir = null; private final String filename; diff --git a/core/src/main/resources/struts-6.5.0.dtd b/core/src/main/resources/struts-6.5.dtd similarity index 98% rename from core/src/main/resources/struts-6.5.0.dtd rename to core/src/main/resources/struts-6.5.dtd index bf1b534a9..6c2ef0d05 100644 --- a/core/src/main/resources/struts-6.5.0.dtd +++ b/core/src/main/resources/struts-6.5.dtd @@ -26,8 +26,8 @@ Use the following DOCTYPE + "-//Apache Software Foundation//DTD Struts Configuration 6.5//EN" + "https://struts.apache.org/dtds/struts-6.5.dtd"> --> diff --git a/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-package-extends-final.xml b/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-package-extends-final.xml index 28b9526b9..4e4242235 100644 --- a/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-package-extends-final.xml +++ b/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-package-extends-final.xml @@ -20,8 +20,8 @@ */ --> + "-//Apache Software Foundation//DTD Struts Configuration 6.5//EN" + "struts-6.5.dtd"> diff --git a/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-package-final.xml b/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-package-final.xml index 12ac2b4fa..2a49a153b 100644 --- a/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-package-final.xml +++ b/core/src/test/resources/com/opensymphony/xwork2/config/providers/xwork-test-package-final.xml @@ -20,8 +20,8 @@ */ --> + "-//Apache Software Foundation//DTD Struts Configuration 6.5//EN" + "struts-6.5.dtd"> From 0a720971c7c7b0d9ba168833ab4beba198ff3285 Mon Sep 17 00:00:00 2001 From: Jeffery Xie Date: Thu, 18 Apr 2024 11:02:16 +1000 Subject: [PATCH 17/21] WW-5417 bump ognl version to fix security issue --- .../ognl/OgnlSetPossiblePropertyTest.java | 240 ++++++++++++++++++ pom.xml | 2 +- 2 files changed, 241 insertions(+), 1 deletion(-) create mode 100644 core/src/test/java/org/apache/struts2/ognl/OgnlSetPossiblePropertyTest.java diff --git a/core/src/test/java/org/apache/struts2/ognl/OgnlSetPossiblePropertyTest.java b/core/src/test/java/org/apache/struts2/ognl/OgnlSetPossiblePropertyTest.java new file mode 100644 index 000000000..546d2fd29 --- /dev/null +++ b/core/src/test/java/org/apache/struts2/ognl/OgnlSetPossiblePropertyTest.java @@ -0,0 +1,240 @@ +/* + * 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. + */ +package org.apache.struts2.ognl; + +import com.opensymphony.xwork2.XWorkTestCase; +import com.opensymphony.xwork2.ognl.OgnlValueStack; +import com.opensymphony.xwork2.util.ValueStackFactory; +import ognl.OgnlRuntime; +import org.apache.struts2.StrutsConstants; + +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; + +import static org.junit.Assert.assertNotEquals; + +public class OgnlSetPossiblePropertyTest extends XWorkTestCase { + private OgnlValueStack vs; + + public T setUpClass(Class holderClass) throws Exception { + Map properties = new HashMap<>(); + properties.put(StrutsConstants.STRUTS_EXCLUDED_CLASSES, holderClass.getName() + "$ExcludedField"); + loadButSet(properties); + vs = (OgnlValueStack) container.getInstance(ValueStackFactory.class).createValueStack(); + + T nonExcludedHolder = holderClass.getDeclaredConstructor().newInstance(); + vs.push(nonExcludedHolder); + + return nonExcludedHolder; + } + + public void testSetFieldValueDontAssignWhenHolderClassAndFieldClassHaveOnlyPublicFields() throws Exception { + /* Case: to test setFieldValue without having set method + * + * NonExcludedHolder class + * - field: public + * ExcludeField class + * - field: public + */ + HolderWithPublicField holder = setUpClass(HolderWithPublicField.class); + vs.setValue("excludedField.excludedFieldString", "EXPLOITED"); + + assertNotEquals("EXPLOITED", holder.excludedField.excludedFieldString); + } + + public void testSetMethodValueDontAssignWhenHolderAndFieldClassWithPublicMethodsAndPrivateFields() throws Exception { + /* Case: to test setMethodValue, so to make fields as private + * + * NonExcludedHolder class + * - field: private + * - method: public + * ExcludeField class + * - field: private + * - method: public + */ + HolderWithPublicMethod holder = setUpClass(HolderWithPublicMethod.class); + vs.setValue("excludedField.excludedFieldString", "EXPLOITED"); + + assertNotEquals("EXPLOITED", holder.excludedField.excludedFieldString); + } + + public void testSetFieldValueDontAssignWhenHolderClassWithGetMethodAndFieldClassWithPublicField() throws Exception { + /* Case: to test setFieldValue when holder get method is public and field class set method is private so fallback to set field + * + * NonExcludedHolder class + * - field: private + * - method: public + * ExcludeField class + * - field: public + * - method: private + */ + HolderWhoseFieldWithPrivateMethod holder = setUpClass(HolderWhoseFieldWithPrivateMethod.class); + vs.setValue("excludedField.excludedFieldString", "EXPLOITED"); + + assertNotEquals("EXPLOITED", holder.excludedField.excludedFieldString); + } + + public void testSetMethodValueDontAssignWhenHolderClassWithGetMethodAndFieldClassWithPublicMethod() throws Exception { + /* Case: to test setMethodValue when holder get method is public and field class field is private so only call to set method + * + * NonExcludedHolder class + * - field: private + * - method: public + * ExcludeField class + * - field: private + * - method: public + */ + HolderWhoseFieldWithPublicMethod holder = setUpClass(HolderWhoseFieldWithPublicMethod.class); + vs.setValue("excludedField.excludedFieldString", "EXPLOITED"); + + assertNotEquals("EXPLOITED", holder.excludedField.excludedFieldString); + } + + public void testWriteMethodValueDontAssignWhenWriteMethodIsNotAccessible() throws Exception { + /* Case: to test invoke method from getWriteMethod when holder get method is public and field class field / set method is private so fallback to write method + * + * NonExcludedHolder class + * - field: private + * - method: public + * ExcludeField class + * - field: private + * - set method: private + * - write method: public + */ + HolderWhoseFieldWithPublicWriteMethod holder = setUpClass(HolderWhoseFieldWithPublicWriteMethod.class); + Method writeMethod = OgnlRuntime.getWriteMethod(HolderWhoseFieldWithPublicWriteMethod.ExcludedField.class, "excludedFieldString"); + vs.setValue("excludedField.excludedFieldString", "EXPLOITED"); + + assertEquals("setexcludedfieldstring", writeMethod.getName()); + assertNotEquals("EXPLOITED", holder.excludedField.excludedFieldString); + } + + public void testWriteMethodValueDontAssignWhenPublicSetterDifferentFieldName() throws Exception { + /* Case: to test invoke method from getWriteMethod when holder get method is public and field class field / set method is of different name + * + * NonExcludedHolder class + * - field: private + * - method: public + * ExcludeField class + * - field: private + * - set method: public (but not matching with field name) + */ + HolderWhoseFieldWithPublicSetterDifferentFieldName holder = setUpClass(HolderWhoseFieldWithPublicSetterDifferentFieldName.class); + vs.setValue("excludedField.excludedFieldString", "EXPLOITED"); + + assertNotEquals("EXPLOITED", holder.excludedField.excludedFieldStringInternal); + } + + + public static class HolderWithPublicField { + public ExcludedField excludedField = new ExcludedField(); + + public static class ExcludedField { + public String excludedFieldString = "defaultValue"; + } + } + + public static class HolderWithPublicMethod { + private ExcludedField excludedField = new ExcludedField(); + + public ExcludedField getExcludedField() { + return excludedField; + } + + public static class ExcludedField { + private String excludedFieldString = "defaultValue"; + + public void setExcludedFieldString(String value) { + this.excludedFieldString = value; + } + } + } + + public static class HolderWhoseFieldWithPrivateMethod { + private ExcludedField excludedField = new ExcludedField(); + + + public ExcludedField getExcludedField() { + return excludedField; + } + + public static class ExcludedField { + public String excludedFieldString = "defaultValue"; + + private void setExcludedFieldString(String value) { + this.excludedFieldString = value; + } + } + } + + public static class HolderWhoseFieldWithPublicMethod { + private ExcludedField excludedField = new ExcludedField(); + + + public ExcludedField getExcludedField() { + return excludedField; + } + + public static class ExcludedField { + public String excludedFieldString = "defaultValue"; + + private void setExcludedFieldString(String value) { + this.excludedFieldString = value; + } + } + } + + public static class HolderWhoseFieldWithPublicWriteMethod { + private ExcludedField excludedField = new ExcludedField(); + + + public ExcludedField getExcludedField() { + return excludedField; + } + + public static class ExcludedField { + private String excludedFieldString = "defaultValue"; + + private void setExcludedFieldString(String value) { + this.excludedFieldString = value; + } + + public void setexcludedfieldstring(String value) { + this.excludedFieldString = value; + } + } + } + + public static class HolderWhoseFieldWithPublicSetterDifferentFieldName { + private ExcludedField excludedField = new ExcludedField(); + + public ExcludedField getExcludedField() { + return excludedField; + } + + public static class ExcludedField { + private String excludedFieldStringInternal = "defaultValue"; + + public void setExcludedFieldString(String value) { + this.excludedFieldStringInternal = value; + } + } + } +} diff --git a/pom.xml b/pom.xml index 34490d5e3..c8fb0f175 100644 --- a/pom.xml +++ b/pom.xml @@ -112,7 +112,7 @@ 9.6 2.16.1 2.23.1 - 3.3.4 + 3.3.4-atlassian-1 2.0.12 5.3.31 3.0.8 From 100f5052d40a4bfbc128661ea489b0c8568a78a0 Mon Sep 17 00:00:00 2001 From: Kusal Kithul-Godage Date: Thu, 18 Apr 2024 11:13:56 +1000 Subject: [PATCH 18/21] WW-5418 Forbid enums --- .../xwork2/ognl/SecurityMemberAccess.java | 16 ---------------- .../xwork2/ognl/OgnlValueStackTest.java | 8 ++++---- .../xwork2/ognl/SecurityMemberAccessTest.java | 2 +- 3 files changed, 5 insertions(+), 21 deletions(-) diff --git a/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java b/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java index b0ee1f21c..43ae99240 100644 --- a/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java +++ b/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java @@ -31,7 +31,6 @@ import org.apache.struts2.ognl.ThreadAllowlist; import java.lang.reflect.AccessibleObject; import java.lang.reflect.Field; import java.lang.reflect.Member; -import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.Arrays; import java.util.HashSet; @@ -313,10 +312,6 @@ public class SecurityMemberAccess implements MemberAccess { * @return {@code true} if member access is allowed */ protected boolean checkStaticMethodAccess(Member member) { - if (checkEnumAccess(member)) { - LOG.trace("Exempting Enum#values from static method check: class [{}]", member.getDeclaringClass()); - return true; - } return member instanceof Field || !isStatic(member); } @@ -347,17 +342,6 @@ public class SecurityMemberAccess implements MemberAccess { return Modifier.isPublic(member.getModifiers()); } - /** - * @return {@code true} if member access is allowed - */ - protected boolean checkEnumAccess(Member member) { - return member.getDeclaringClass().isEnum() - && isStatic(member) - && member instanceof Method - && member.getName().equals("values") - && ((Method) member).getParameterCount() == 0; - } - protected boolean isPackageExcluded(Class clazz) { return !excludedPackageExemptClasses.contains(clazz.getName()) && (isExcludedPackageNames(clazz) || isExcludedPackageNamePatterns(clazz)); } diff --git a/core/src/test/java/com/opensymphony/xwork2/ognl/OgnlValueStackTest.java b/core/src/test/java/com/opensymphony/xwork2/ognl/OgnlValueStackTest.java index 3bdfd67fc..7fb560c5b 100644 --- a/core/src/test/java/com/opensymphony/xwork2/ognl/OgnlValueStackTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/ognl/OgnlValueStackTest.java @@ -437,12 +437,12 @@ public class OgnlValueStackTest extends XWorkTestCase { } /** - * Allow access Enums without enabling access to static methods + * Enum methods should also be banned alongside static methods */ public void testEnum() throws Exception { - assertEquals("ONE", vs.findValue("@com.opensymphony.xwork2.ognl.MyNumbers@values()[0]", String.class)); - assertEquals("TWO", vs.findValue("@com.opensymphony.xwork2.ognl.MyNumbers@values()[1]", String.class)); - assertEquals("THREE", vs.findValue("@com.opensymphony.xwork2.ognl.MyNumbers@values()[2]", String.class)); + assertNull("ONE", vs.findValue("@com.opensymphony.xwork2.ognl.MyNumbers@values()[0]", String.class)); + assertNull("TWO", vs.findValue("@com.opensymphony.xwork2.ognl.MyNumbers@values()[1]", String.class)); + assertNull("THREE", vs.findValue("@com.opensymphony.xwork2.ognl.MyNumbers@values()[2]", String.class)); } public void testStaticMethodDisallow() { diff --git a/core/src/test/java/com/opensymphony/xwork2/ognl/SecurityMemberAccessTest.java b/core/src/test/java/com/opensymphony/xwork2/ognl/SecurityMemberAccessTest.java index 03bad82e4..381b7d0ad 100644 --- a/core/src/test/java/com/opensymphony/xwork2/ognl/SecurityMemberAccessTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/ognl/SecurityMemberAccessTest.java @@ -413,7 +413,7 @@ public class SecurityMemberAccessTest { boolean actual = sma.isAccessible(context, MyValues.class, values, null); // then - assertTrue("Access to enums is blocked!", actual); + assertFalse("Access to enums is allowed!", actual); } @Test From 7e9f6e84f2ed7d19c518a50e5ab1c079b6df02c1 Mon Sep 17 00:00:00 2001 From: Kusal Kithul-Godage Date: Thu, 18 Apr 2024 11:14:10 +1000 Subject: [PATCH 19/21] WW-5418 Exclude Tomcat Jasper classes --- core/src/main/resources/struts-excluded-classes.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/src/main/resources/struts-excluded-classes.xml b/core/src/main/resources/struts-excluded-classes.xml index f3f4f3f19..58b89aae4 100644 --- a/core/src/main/resources/struts-excluded-classes.xml +++ b/core/src/main/resources/struts-excluded-classes.xml @@ -92,6 +92,7 @@ org.apache.catalina.core, org.apache.commons.beanutils, org.apache.commons.collections, + org.apache.jasper, org.apache.struts2.ognl, org.apache.tomcat, org.apache.velocity, @@ -124,6 +125,7 @@ org.apache.catalina.core, org.apache.commons.beanutils, org.apache.commons.collections, + org.apache.jasper, org.apache.struts2.ognl, org.apache.tomcat, org.apache.velocity, From ad49ea866a097396135fb347543ec581bcad4389 Mon Sep 17 00:00:00 2001 From: Kusal Kithul-Godage Date: Thu, 18 Apr 2024 22:28:30 +1000 Subject: [PATCH 20/21] WW-5406 Fix injection order issue for excluded patterns --- .../apache/struts2/dispatcher/Dispatcher.java | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java index af5bb5402..a1f9094d1 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java @@ -167,8 +167,9 @@ public class Dispatcher { */ private Pattern multipartValidationPattern = Pattern.compile(MULTIPART_FORM_DATA_REGEX); + private String actionExcludedPatternsStr; private String actionExcludedPatternsSeparator = ","; - private List actionExcludedPatterns = emptyList(); + private List actionExcludedPatterns; /** * Provide list of default configuration files. @@ -355,20 +356,26 @@ public class Dispatcher { @Inject(value = StrutsConstants.STRUTS_ACTION_EXCLUDE_PATTERN, required = false) public void setActionExcludedPatterns(String excludedPatterns) { - this.actionExcludedPatterns = buildExcludedPatternsList(excludedPatterns, actionExcludedPatternsSeparator); - } - - private static List buildExcludedPatternsList(String patterns, String separator) { - if (patterns == null || patterns.trim().isEmpty()) { - return emptyList(); - } - return unmodifiableList(Arrays.stream(patterns.split(separator)).map(String::trim).map(Pattern::compile).collect(toList())); + this.actionExcludedPatternsStr = excludedPatterns; } public List getActionExcludedPatterns() { + if (actionExcludedPatterns == null) { + initActionExcludedPatterns(); + } return actionExcludedPatterns; } + private void initActionExcludedPatterns() { + if (actionExcludedPatternsStr == null || actionExcludedPatternsStr.trim().isEmpty()) { + actionExcludedPatterns = emptyList(); + return; + } + actionExcludedPatterns = unmodifiableList( + Arrays.stream(actionExcludedPatternsStr.split(actionExcludedPatternsSeparator)) + .map(String::trim).map(Pattern::compile).collect(toList())); + } + @Inject public void setValueStackFactory(ValueStackFactory valueStackFactory) { this.valueStackFactory = valueStackFactory; From 62b4b65c4c802d9a2b864b9a19c8ab60e2a8d47a Mon Sep 17 00:00:00 2001 From: Jeffery Xie Date: Fri, 19 Apr 2024 14:58:25 +1000 Subject: [PATCH 21/21] WW-5417 update ognl.version as 3.3.5 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c8fb0f175..c86b1290f 100644 --- a/pom.xml +++ b/pom.xml @@ -112,7 +112,7 @@ 9.6 2.16.1 2.23.1 - 3.3.4-atlassian-1 + 3.3.5 2.0.12 5.3.31 3.0.8