This is an automated email from the ASF dual-hosted git repository. kusal pushed a commit to branch kusal-depr-apis-6 in repository https://gitbox.apache.org/repos/asf/struts.git
commit 89c093088df03ee66d14d831ede8c3ab15ea44fb Author: Kusal Kithul-Godage <g...@kusal.io> AuthorDate: Thu Oct 17 16:26:01 2024 +1100 WW-3714 Deprecate and migrate AbstractInterceptor and MethodFilterInterceptor --- .../xwork2/interceptor/AbstractInterceptor.java | 3 +- .../interceptor/MethodFilterInterceptor.java | 45 ++++---- .../interceptor/MethodFilterInterceptorUtil.java | 128 +-------------------- .../struts2}/interceptor/AbstractInterceptor.java | 4 +- .../interceptor/MethodFilterInterceptor.java | 50 ++++---- .../interceptor/MethodFilterInterceptorUtil.java | 38 +++--- 6 files changed, 75 insertions(+), 193 deletions(-) diff --git a/core/src/main/java/com/opensymphony/xwork2/interceptor/AbstractInterceptor.java b/core/src/main/java/com/opensymphony/xwork2/interceptor/AbstractInterceptor.java index 21e459c29..27b91e20d 100644 --- a/core/src/main/java/com/opensymphony/xwork2/interceptor/AbstractInterceptor.java +++ b/core/src/main/java/com/opensymphony/xwork2/interceptor/AbstractInterceptor.java @@ -21,8 +21,9 @@ package com.opensymphony.xwork2.interceptor; import com.opensymphony.xwork2.ActionInvocation; /** - * Provides default implementations of optional lifecycle methods + * @deprecated since 6.7.0, use {@link org.apache.struts2.interceptor.AbstractInterceptor} instead. */ +@Deprecated public abstract class AbstractInterceptor implements ConditionalInterceptor { private boolean disabled; diff --git a/core/src/main/java/com/opensymphony/xwork2/interceptor/MethodFilterInterceptor.java b/core/src/main/java/com/opensymphony/xwork2/interceptor/MethodFilterInterceptor.java index e96951cfa..bcce3da12 100644 --- a/core/src/main/java/com/opensymphony/xwork2/interceptor/MethodFilterInterceptor.java +++ b/core/src/main/java/com/opensymphony/xwork2/interceptor/MethodFilterInterceptor.java @@ -31,56 +31,59 @@ import java.util.Set; * * <p> * MethodFilterInterceptor is an abstract <code>Interceptor</code> used as - * a base class for interceptors that will filter execution based on method + * a base class for interceptors that will filter execution based on method * names according to specified included/excluded method lists. - * + * * </p> - * + * * Settable parameters are as follows: - * + * * <ul> * <li>excludeMethods - method names to be excluded from interceptor processing</li> * <li>includeMethods - method names to be included in interceptor processing</li> * </ul> - * + * * <p> - * - * <b>NOTE:</b> If method name are available in both includeMethods and - * excludeMethods, it will be considered as an included method: + * + * <b>NOTE:</b> If method name are available in both includeMethods and + * excludeMethods, it will be considered as an included method: * includeMethods takes precedence over excludeMethods. - * + * * </p> - * + * * Interceptors that extends this capability include: - * + * * <ul> * <li>TokenInterceptor</li> * <li>TokenSessionStoreInterceptor</li> * <li>DefaultWorkflowInterceptor</li> * <li>ValidationInterceptor</li> * </ul> - * + * * <!-- END SNIPPET: javadoc --> - * + * * @author <a href='mailto:the_mindstorm[at]evolva[dot]ro'>Alexandru Popescu</a> * @author Rainer Hermanns - * + * * @see org.apache.struts2.interceptor.TokenInterceptor * @see org.apache.struts2.interceptor.TokenSessionStoreInterceptor * @see com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor * @see com.opensymphony.xwork2.validator.ValidationInterceptor + * + * @deprecated since 6.7.0, use {@link org.apache.struts2.interceptor.MethodFilterInterceptor} instead. */ +@Deprecated public abstract class MethodFilterInterceptor extends AbstractInterceptor { private static final Logger LOG = LogManager.getLogger(MethodFilterInterceptor.class); - + protected Set<String> excludeMethods = Collections.emptySet(); protected Set<String> includeMethods = Collections.emptySet(); public void setExcludeMethods(String excludeMethods) { this.excludeMethods = TextParseUtil.commaDelimitedStringToSet(excludeMethods); } - + public Set<String> getExcludeMethodsSet() { return excludeMethods; } @@ -88,7 +91,7 @@ public abstract class MethodFilterInterceptor extends AbstractInterceptor { public void setIncludeMethods(String includeMethods) { this.includeMethods = TextParseUtil.commaDelimitedStringToSet(includeMethods); } - + public Set<String> getIncludeMethodsSet() { return includeMethods; } @@ -97,7 +100,7 @@ public abstract class MethodFilterInterceptor extends AbstractInterceptor { public String intercept(ActionInvocation invocation) throws Exception { if (applyInterceptor(invocation)) { return doIntercept(invocation); - } + } return invocation.invoke(); } @@ -110,14 +113,14 @@ public abstract class MethodFilterInterceptor extends AbstractInterceptor { } return applyMethod; } - + /** * Subclasses must override to implement the interceptor logic. - * + * * @param invocation the action invocation * @return the result of invocation * @throws Exception in case of any errors */ protected abstract String doIntercept(ActionInvocation invocation) throws Exception; - + } diff --git a/core/src/main/java/com/opensymphony/xwork2/interceptor/MethodFilterInterceptorUtil.java b/core/src/main/java/com/opensymphony/xwork2/interceptor/MethodFilterInterceptorUtil.java index beacb8784..7e1a2c434 100644 --- a/core/src/main/java/com/opensymphony/xwork2/interceptor/MethodFilterInterceptorUtil.java +++ b/core/src/main/java/com/opensymphony/xwork2/interceptor/MethodFilterInterceptorUtil.java @@ -18,131 +18,9 @@ */ package com.opensymphony.xwork2.interceptor; -import com.opensymphony.xwork2.util.TextParseUtil; -import com.opensymphony.xwork2.util.WildcardHelper; - -import java.util.HashMap; -import java.util.Set; - /** - * Utility class contains common methods used by - * {@link com.opensymphony.xwork2.interceptor.MethodFilterInterceptor}. - * - * @author tm_jee + * @deprecated since 6.7.0, use {@link org.apache.struts2.interceptor.MethodFilterInterceptorUtil} instead. */ -public class MethodFilterInterceptorUtil { - - /** - * Static method to decide if the specified <code>method</code> should be - * apply (not filtered) depending on the set of <code>excludeMethods</code> and - * <code>includeMethods</code>. - * - * <ul> - * <li> - * <code>includeMethods</code> takes precedence over <code>excludeMethods</code> - * </li> - * </ul> - * <b>Note:</b> Supports wildcard listings in includeMethods/excludeMethods - * - * @param excludeMethods list of methods to exclude. - * @param includeMethods list of methods to include. - * @param method the specified method to check - * @return <tt>true</tt> if the method should be applied. - */ - public static boolean applyMethod(Set<String> excludeMethods, Set<String> includeMethods, String method) { - - // quick check to see if any actual pattern matching is needed - boolean needsPatternMatch = false; - for (String includeMethod : includeMethods) { - if (!"*".equals(includeMethod) && includeMethod.contains("*")) { - needsPatternMatch = true; - break; - } - } - - for (String excludeMethod : excludeMethods) { - if (!"*".equals(excludeMethod) && excludeMethod.contains("*")) { - needsPatternMatch = true; - break; - } - } - - // this section will try to honor the original logic, while - // still allowing for wildcards later - if (!needsPatternMatch && (includeMethods.contains("*") || includeMethods.size() == 0) ) { - if (excludeMethods != null - && excludeMethods.contains(method) - && !includeMethods.contains(method) ) { - return false; - } - } - - // test the methods using pattern matching - WildcardHelper wildcard = new WildcardHelper(); - String methodCopy ; - if (method == null ) { // no method specified - methodCopy = ""; - } - else { - methodCopy = new String(method); - } - for (String pattern : includeMethods) { - if (pattern.contains("*")) { - int[] compiledPattern = wildcard.compilePattern(pattern); - HashMap<String, String> matchedPatterns = new HashMap<>(); - boolean matches = wildcard.match(matchedPatterns, methodCopy, compiledPattern); - if (matches) { - return true; // run it, includeMethods takes precedence - } - } - else { - if (pattern.equals(methodCopy)) { - return true; // run it, includeMethods takes precedence - } - } - } - if (excludeMethods.contains("*") ) { - return false; - } - - // CHECK ME: Previous implementation used include method - for ( String pattern : excludeMethods) { - if (pattern.contains("*")) { - int[] compiledPattern = wildcard.compilePattern(pattern); - HashMap<String, String> matchedPatterns = new HashMap<>(); - boolean matches = wildcard.match(matchedPatterns, methodCopy, compiledPattern); - if (matches) { - // if found, and wasn't included earlier, don't run it - return false; - } - } - else { - if (pattern.equals(methodCopy)) { - // if found, and wasn't included earlier, don't run it - return false; - } - } - } - - - // default fall-back from before changes - return includeMethods.size() == 0 || includeMethods.contains(method) || includeMethods.contains("*"); - } - - /** - * Same as {@link #applyMethod(Set, Set, String)}, except that <code>excludeMethods</code> - * and <code>includeMethods</code> are supplied as comma separated string. - * - * @param excludeMethods comma seperated string of methods to exclude. - * @param includeMethods comma seperated string of methods to include. - * @param method the specified method to check - * @return <tt>true</tt> if the method should be applied. - */ - public static boolean applyMethod(String excludeMethods, String includeMethods, String method) { - Set<String> includeMethodsSet = TextParseUtil.commaDelimitedStringToSet(includeMethods == null? "" : includeMethods); - Set<String> excludeMethodsSet = TextParseUtil.commaDelimitedStringToSet(excludeMethods == null? "" : excludeMethods); - - return applyMethod(excludeMethodsSet, includeMethodsSet, method); - } - +@Deprecated +public class MethodFilterInterceptorUtil extends org.apache.struts2.interceptor.MethodFilterInterceptorUtil { } diff --git a/core/src/main/java/com/opensymphony/xwork2/interceptor/AbstractInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/AbstractInterceptor.java similarity index 95% copy from core/src/main/java/com/opensymphony/xwork2/interceptor/AbstractInterceptor.java copy to core/src/main/java/org/apache/struts2/interceptor/AbstractInterceptor.java index 21e459c29..ddb48a0d7 100644 --- a/core/src/main/java/com/opensymphony/xwork2/interceptor/AbstractInterceptor.java +++ b/core/src/main/java/org/apache/struts2/interceptor/AbstractInterceptor.java @@ -16,9 +16,9 @@ * specific language governing permissions and limitations * under the License. */ -package com.opensymphony.xwork2.interceptor; +package org.apache.struts2.interceptor; -import com.opensymphony.xwork2.ActionInvocation; +import org.apache.struts2.ActionInvocation; /** * Provides default implementations of optional lifecycle methods diff --git a/core/src/main/java/com/opensymphony/xwork2/interceptor/MethodFilterInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/MethodFilterInterceptor.java similarity index 90% copy from core/src/main/java/com/opensymphony/xwork2/interceptor/MethodFilterInterceptor.java copy to core/src/main/java/org/apache/struts2/interceptor/MethodFilterInterceptor.java index e96951cfa..1ffe68261 100644 --- a/core/src/main/java/com/opensymphony/xwork2/interceptor/MethodFilterInterceptor.java +++ b/core/src/main/java/org/apache/struts2/interceptor/MethodFilterInterceptor.java @@ -16,12 +16,12 @@ * specific language governing permissions and limitations * under the License. */ -package com.opensymphony.xwork2.interceptor; +package org.apache.struts2.interceptor; -import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.util.TextParseUtil; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.apache.struts2.ActionInvocation; import java.util.Collections; import java.util.Set; @@ -31,56 +31,56 @@ import java.util.Set; * * <p> * MethodFilterInterceptor is an abstract <code>Interceptor</code> used as - * a base class for interceptors that will filter execution based on method + * a base class for interceptors that will filter execution based on method * names according to specified included/excluded method lists. - * + * * </p> - * + * * Settable parameters are as follows: - * + * * <ul> * <li>excludeMethods - method names to be excluded from interceptor processing</li> * <li>includeMethods - method names to be included in interceptor processing</li> * </ul> - * + * * <p> - * - * <b>NOTE:</b> If method name are available in both includeMethods and - * excludeMethods, it will be considered as an included method: + * + * <b>NOTE:</b> If method name are available in both includeMethods and + * excludeMethods, it will be considered as an included method: * includeMethods takes precedence over excludeMethods. - * + * * </p> - * + * * Interceptors that extends this capability include: - * + * * <ul> * <li>TokenInterceptor</li> * <li>TokenSessionStoreInterceptor</li> * <li>DefaultWorkflowInterceptor</li> * <li>ValidationInterceptor</li> * </ul> - * + * * <!-- END SNIPPET: javadoc --> - * + * * @author <a href='mailto:the_mindstorm[at]evolva[dot]ro'>Alexandru Popescu</a> * @author Rainer Hermanns - * - * @see org.apache.struts2.interceptor.TokenInterceptor - * @see org.apache.struts2.interceptor.TokenSessionStoreInterceptor + * + * @see TokenInterceptor + * @see TokenSessionStoreInterceptor * @see com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor * @see com.opensymphony.xwork2.validator.ValidationInterceptor */ public abstract class MethodFilterInterceptor extends AbstractInterceptor { private static final Logger LOG = LogManager.getLogger(MethodFilterInterceptor.class); - + protected Set<String> excludeMethods = Collections.emptySet(); protected Set<String> includeMethods = Collections.emptySet(); public void setExcludeMethods(String excludeMethods) { this.excludeMethods = TextParseUtil.commaDelimitedStringToSet(excludeMethods); } - + public Set<String> getExcludeMethodsSet() { return excludeMethods; } @@ -88,7 +88,7 @@ public abstract class MethodFilterInterceptor extends AbstractInterceptor { public void setIncludeMethods(String includeMethods) { this.includeMethods = TextParseUtil.commaDelimitedStringToSet(includeMethods); } - + public Set<String> getIncludeMethodsSet() { return includeMethods; } @@ -97,7 +97,7 @@ public abstract class MethodFilterInterceptor extends AbstractInterceptor { public String intercept(ActionInvocation invocation) throws Exception { if (applyInterceptor(invocation)) { return doIntercept(invocation); - } + } return invocation.invoke(); } @@ -110,14 +110,14 @@ public abstract class MethodFilterInterceptor extends AbstractInterceptor { } return applyMethod; } - + /** * Subclasses must override to implement the interceptor logic. - * + * * @param invocation the action invocation * @return the result of invocation * @throws Exception in case of any errors */ protected abstract String doIntercept(ActionInvocation invocation) throws Exception; - + } diff --git a/core/src/main/java/com/opensymphony/xwork2/interceptor/MethodFilterInterceptorUtil.java b/core/src/main/java/org/apache/struts2/interceptor/MethodFilterInterceptorUtil.java similarity index 92% copy from core/src/main/java/com/opensymphony/xwork2/interceptor/MethodFilterInterceptorUtil.java copy to core/src/main/java/org/apache/struts2/interceptor/MethodFilterInterceptorUtil.java index beacb8784..2a43ba2ff 100644 --- a/core/src/main/java/com/opensymphony/xwork2/interceptor/MethodFilterInterceptorUtil.java +++ b/core/src/main/java/org/apache/struts2/interceptor/MethodFilterInterceptorUtil.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package com.opensymphony.xwork2.interceptor; +package org.apache.struts2.interceptor; import com.opensymphony.xwork2.util.TextParseUtil; import com.opensymphony.xwork2.util.WildcardHelper; @@ -25,17 +25,17 @@ import java.util.HashMap; import java.util.Set; /** - * Utility class contains common methods used by - * {@link com.opensymphony.xwork2.interceptor.MethodFilterInterceptor}. - * + * Utility class contains common methods used by + * {@link MethodFilterInterceptor}. + * * @author tm_jee */ public class MethodFilterInterceptorUtil { /** * Static method to decide if the specified <code>method</code> should be - * apply (not filtered) depending on the set of <code>excludeMethods</code> and - * <code>includeMethods</code>. + * apply (not filtered) depending on the set of <code>excludeMethods</code> and + * <code>includeMethods</code>. * * <ul> * <li> @@ -50,7 +50,7 @@ public class MethodFilterInterceptorUtil { * @return <tt>true</tt> if the method should be applied. */ public static boolean applyMethod(Set<String> excludeMethods, Set<String> includeMethods, String method) { - + // quick check to see if any actual pattern matching is needed boolean needsPatternMatch = false; for (String includeMethod : includeMethods) { @@ -59,7 +59,7 @@ public class MethodFilterInterceptorUtil { break; } } - + for (String excludeMethod : excludeMethods) { if (!"*".equals(excludeMethod) && excludeMethod.contains("*")) { needsPatternMatch = true; @@ -67,16 +67,16 @@ public class MethodFilterInterceptorUtil { } } - // this section will try to honor the original logic, while + // this section will try to honor the original logic, while // still allowing for wildcards later if (!needsPatternMatch && (includeMethods.contains("*") || includeMethods.size() == 0) ) { - if (excludeMethods != null - && excludeMethods.contains(method) + if (excludeMethods != null + && excludeMethods.contains(method) && !includeMethods.contains(method) ) { return false; } } - + // test the methods using pattern matching WildcardHelper wildcard = new WildcardHelper(); String methodCopy ; @@ -105,7 +105,7 @@ public class MethodFilterInterceptorUtil { return false; } - // CHECK ME: Previous implementation used include method + // CHECK ME: Previous implementation used include method for ( String pattern : excludeMethods) { if (pattern.contains("*")) { int[] compiledPattern = wildcard.compilePattern(pattern); @@ -113,26 +113,26 @@ public class MethodFilterInterceptorUtil { boolean matches = wildcard.match(matchedPatterns, methodCopy, compiledPattern); if (matches) { // if found, and wasn't included earlier, don't run it - return false; + return false; } } else { if (pattern.equals(methodCopy)) { // if found, and wasn't included earlier, don't run it - return false; + return false; } } } - + // default fall-back from before changes return includeMethods.size() == 0 || includeMethods.contains(method) || includeMethods.contains("*"); } - + /** * Same as {@link #applyMethod(Set, Set, String)}, except that <code>excludeMethods</code> * and <code>includeMethods</code> are supplied as comma separated string. - * + * * @param excludeMethods comma seperated string of methods to exclude. * @param includeMethods comma seperated string of methods to include. * @param method the specified method to check @@ -141,7 +141,7 @@ public class MethodFilterInterceptorUtil { public static boolean applyMethod(String excludeMethods, String includeMethods, String method) { Set<String> includeMethodsSet = TextParseUtil.commaDelimitedStringToSet(includeMethods == null? "" : includeMethods); Set<String> excludeMethodsSet = TextParseUtil.commaDelimitedStringToSet(excludeMethods == null? "" : excludeMethods); - + return applyMethod(excludeMethodsSet, includeMethodsSet, method); }