This is an automated email from the ASF dual-hosted git repository.

kusal pushed a commit to branch WW-5406-injection-order
in repository https://gitbox.apache.org/repos/asf/struts.git

commit ad49ea866a097396135fb347543ec581bcad4389
Author: Kusal Kithul-Godage <g...@kusal.io>
AuthorDate: Thu Apr 18 22:28:30 2024 +1000

    WW-5406 Fix injection order issue for excluded patterns
---
 .../org/apache/struts2/dispatcher/Dispatcher.java  | 23 ++++++++++++++--------
 1 file changed, 15 insertions(+), 8 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<Pattern> actionExcludedPatterns = emptyList();
+    private List<Pattern> actionExcludedPatterns;
 
     /**
      * Provide list of default configuration files.
@@ -355,18 +356,24 @@ public class Dispatcher {
 
     @Inject(value = StrutsConstants.STRUTS_ACTION_EXCLUDE_PATTERN, required = 
false)
     public void setActionExcludedPatterns(String excludedPatterns) {
-        this.actionExcludedPatterns = 
buildExcludedPatternsList(excludedPatterns, actionExcludedPatternsSeparator);
+        this.actionExcludedPatternsStr = excludedPatterns;
     }
 
-    private static List<Pattern> buildExcludedPatternsList(String patterns, 
String separator) {
-        if (patterns == null || patterns.trim().isEmpty()) {
-            return emptyList();
+    public List<Pattern> getActionExcludedPatterns() {
+        if (actionExcludedPatterns == null) {
+            initActionExcludedPatterns();
         }
-        return 
unmodifiableList(Arrays.stream(patterns.split(separator)).map(String::trim).map(Pattern::compile).collect(toList()));
+        return actionExcludedPatterns;
     }
 
-    public List<Pattern> getActionExcludedPatterns() {
-        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

Reply via email to