mirror of
https://github.com/apache/struts.git
synced 2026-08-07 15:46:57 +00:00
WW-5280 Cleans up NoParameters interfaces
This commit is contained in:
@@ -30,7 +30,8 @@ package com.opensymphony.xwork2.interceptor;
|
||||
* parameters cannot be set by malicious users.
|
||||
* </p>
|
||||
*
|
||||
* @author Dick Zetterberg (dick@transitor.se)
|
||||
* @deprecated since Struts 6.2.0, use {@link org.apache.struts2.action.NoParameters}
|
||||
*/
|
||||
@Deprecated
|
||||
public interface NoParameters {
|
||||
}
|
||||
|
||||
+67
-85
@@ -23,120 +23,102 @@ 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.dispatcher.Parameter;
|
||||
import org.apache.struts2.action.NoParameters;
|
||||
import org.apache.struts2.dispatcher.HttpParameters;
|
||||
import org.apache.struts2.dispatcher.Parameter;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* <!-- START SNIPPET: description -->
|
||||
* This is a simple XWork interceptor that allows parameters (matching
|
||||
* one of the paramNames attribute csv value) to be
|
||||
* one of the paramNames attribute csv value) to be
|
||||
* removed from the parameter map if they match a certain value
|
||||
* (matching one of the paramValues attribute csv value), before they
|
||||
* are set on the action. A typical usage would be to want a dropdown/select
|
||||
* to map onto a boolean value on an action. The select had the options
|
||||
* none, yes and no with values -1, true and false. The true and false would
|
||||
* map across correctly. However the -1 would be set to false.
|
||||
* This was not desired as one might needed the value on the action to stay null.
|
||||
* This interceptor fixes this by preventing the parameter from ever reaching
|
||||
* (matching one of the paramValues attribute csv value), before they
|
||||
* are set on the action. A typical usage would be to want a dropdown/select
|
||||
* to map onto a boolean value on an action. The select had the options
|
||||
* none, yes and no with values -1, true and false. The true and false would
|
||||
* map across correctly. However the -1 would be set to false.
|
||||
* This was not desired as one might needed the value on the action to stay null.
|
||||
* This interceptor fixes this by preventing the parameter from ever reaching
|
||||
* the action.
|
||||
* <!-- END SNIPPET: description -->
|
||||
*
|
||||
*
|
||||
* <!-- START SNIPPET: parameters -->
|
||||
*
|
||||
* <ul>
|
||||
* <li>paramNames - A comma separated value (csv) indicating the parameter name
|
||||
* whose param value should be considered that if they match any of the
|
||||
* comma separated value (csv) from paramValues attribute, shall be
|
||||
* removed from the parameter map such that they will not be applied
|
||||
* to the action</li>
|
||||
* <li>paramValues - A comma separated value (csv) indicating the parameter value that if
|
||||
* matched shall have its parameter be removed from the parameter map
|
||||
* such that they will not be applied to the action</li>
|
||||
* <li>paramNames - A comma separated value (csv) indicating the parameter name
|
||||
* whose param value should be considered that if they match any of the
|
||||
* comma separated value (csv) from paramValues attribute, shall be
|
||||
* removed from the parameter map such that they will not be applied
|
||||
* to the action</li>
|
||||
* <li>paramValues - A comma separated value (csv) indicating the parameter value that if
|
||||
* matched shall have its parameter be removed from the parameter map
|
||||
* such that they will not be applied to the action</li>
|
||||
* </ul>
|
||||
* <!-- END SNIPPET: parameters -->
|
||||
*
|
||||
*
|
||||
* <!-- START SNIPPET: extending -->
|
||||
* <p>
|
||||
* No intended extension point
|
||||
* <!-- END SNIPPET: extending -->
|
||||
*
|
||||
*
|
||||
* <pre>
|
||||
* <!-- START SNIPPET: example -->
|
||||
*
|
||||
* <action name="sample" class="org.martingilday.Sample">
|
||||
* <interceptor-ref name="paramRemover">
|
||||
* <param name="paramNames">aParam,anotherParam</param>
|
||||
* <param name="paramValues">--,-1</param>
|
||||
* <param name="paramNames">aParam,anotherParam</param>
|
||||
* <param name="paramValues">--,-1</param>
|
||||
* </interceptor-ref>
|
||||
* <interceptor-ref name="defaultStack" />
|
||||
* ...
|
||||
* </action>
|
||||
*
|
||||
* <!-- END SNIPPET: example -->
|
||||
* </pre>
|
||||
*
|
||||
*
|
||||
* @author martin.gilday
|
||||
*/
|
||||
public class ParameterRemoverInterceptor extends AbstractInterceptor {
|
||||
|
||||
private static final Logger LOG = LogManager.getLogger(ParameterRemoverInterceptor.class);
|
||||
private static final Logger LOG = LogManager.getLogger(ParameterRemoverInterceptor.class);
|
||||
|
||||
private static final long serialVersionUID = 1;
|
||||
private Set<String> paramNames = Collections.emptySet();
|
||||
private Set<String> paramValues = Collections.emptySet();
|
||||
|
||||
private Set<String> paramNames = Collections.emptySet();
|
||||
private Set<String> paramValues = Collections.emptySet();
|
||||
/**
|
||||
* Decide if the parameter should be removed from the parameter map based on
|
||||
* <code>paramNames</code> and <code>paramValues</code>.
|
||||
*
|
||||
* @see com.opensymphony.xwork2.interceptor.AbstractInterceptor
|
||||
*/
|
||||
@Override
|
||||
public String intercept(ActionInvocation invocation) throws Exception {
|
||||
if (!(invocation.getAction() instanceof NoParameters)
|
||||
&& (null != this.paramNames)) {
|
||||
ActionContext ac = invocation.getInvocationContext();
|
||||
HttpParameters parameters = ac.getParameters();
|
||||
|
||||
|
||||
/**
|
||||
* Decide if the parameter should be removed from the parameter map based on
|
||||
* <code>paramNames</code> and <code>paramValues</code>.
|
||||
*
|
||||
* @see com.opensymphony.xwork2.interceptor.AbstractInterceptor
|
||||
*/
|
||||
@Override
|
||||
public String intercept(ActionInvocation invocation) throws Exception {
|
||||
if (!(invocation.getAction() instanceof NoParameters)
|
||||
&& (null != this.paramNames)) {
|
||||
ActionContext ac = invocation.getInvocationContext();
|
||||
HttpParameters parameters = ac.getParameters();
|
||||
|
||||
if (parameters != null) {
|
||||
if (parameters != null) {
|
||||
for (String removeName : paramNames) {
|
||||
try {
|
||||
Parameter parameter = parameters.get(removeName);
|
||||
if (parameter.isDefined() && this.paramValues.contains(parameter.getValue())) {
|
||||
parameters.remove(removeName);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
LOG.error("Failed to convert parameter to string", e);
|
||||
}
|
||||
try {
|
||||
Parameter parameter = parameters.get(removeName);
|
||||
if (parameter.isDefined() && this.paramValues.contains(parameter.getValue())) {
|
||||
parameters.remove(removeName);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
LOG.error("Failed to convert parameter to string", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return invocation.invoke();
|
||||
}
|
||||
}
|
||||
}
|
||||
return invocation.invoke();
|
||||
}
|
||||
|
||||
/**
|
||||
* Allows <code>paramNames</code> attribute to be set as comma-separated-values (csv).
|
||||
*
|
||||
* @param paramNames the paramNames to set
|
||||
*/
|
||||
public void setParamNames(String paramNames) {
|
||||
this.paramNames = TextParseUtil.commaDelimitedStringToSet(paramNames);
|
||||
}
|
||||
/**
|
||||
* Allows <code>paramNames</code> attribute to be set as comma-separated-values (csv).
|
||||
*
|
||||
* @param paramNames the paramNames to set
|
||||
*/
|
||||
public void setParamNames(String paramNames) {
|
||||
this.paramNames = TextParseUtil.commaDelimitedStringToSet(paramNames);
|
||||
}
|
||||
|
||||
/**
|
||||
* Allows <code>paramValues</code> attribute to be set as a comma-separated-values (csv).
|
||||
*
|
||||
* @param paramValues the paramValues to set
|
||||
*/
|
||||
public void setParamValues(String paramValues) {
|
||||
this.paramValues = TextParseUtil.commaDelimitedStringToSet(paramValues);
|
||||
}
|
||||
|
||||
/**
|
||||
* Allows <code>paramValues</code> attribute to be set as a comma-separated-values (csv).
|
||||
*
|
||||
* @param paramValues the paramValues to set
|
||||
*/
|
||||
public void setParamValues(String paramValues) {
|
||||
this.paramValues = TextParseUtil.commaDelimitedStringToSet(paramValues);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.struts2.interceptor;
|
||||
package org.apache.struts2.action;
|
||||
|
||||
/**
|
||||
* This marker interface should be implemented by actions that do not want any parameters set on
|
||||
Reference in New Issue
Block a user