WW-4173 Adds support to disable processing a given interceptor

This commit is contained in:
Lukasz Lenart
2022-10-21 21:12:41 +02:00
parent 79d6c07a57
commit 94a0c6e425
12 changed files with 223 additions and 379 deletions
@@ -73,7 +73,7 @@ public class DefaultActionInvocation implements ActionInvocation {
protected UnknownHandlerManager unknownHandlerManager;
protected OgnlUtil ognlUtil;
protected AsyncManager asyncManager;
protected Callable asyncAction;
protected Callable<?> asyncAction;
protected WithLazyParams.LazyParamInjector lazyParamInjector;
public DefaultActionInvocation(final Map<String, Object> extraContext, final boolean pushAction) {
@@ -101,7 +101,7 @@ public class DefaultActionInvocation implements ActionInvocation {
this.container = cont;
}
@Inject(required=false)
@Inject(required = false)
public void setActionEventListener(ActionEventListener listener) {
this.actionEventListener = listener;
}
@@ -111,7 +111,7 @@ public class DefaultActionInvocation implements ActionInvocation {
this.ognlUtil = ognlUtil;
}
@Inject(required=false)
@Inject(required = false)
public void setAsyncManager(AsyncManager asyncManager) {
this.asyncManager = asyncManager;
}
@@ -214,7 +214,7 @@ public class DefaultActionInvocation implements ActionInvocation {
} catch (NullPointerException e) {
LOG.debug("Got NPE trying to read result configuration for resultCode [{}]", resultCode);
}
if (resultConfig == null) {
// If no result is found for the given resultCode, try to get a wildcard '*' match.
resultConfig = results.get("*");
@@ -248,7 +248,12 @@ public class DefaultActionInvocation implements ActionInvocation {
if (interceptor instanceof WithLazyParams) {
interceptor = lazyParamInjector.injectParams(interceptor, interceptorMapping.getParams(), invocationContext);
}
resultCode = interceptor.intercept(DefaultActionInvocation.this);
if (interceptor.isDisabled()) {
LOG.debug("Interceptor: {} is disabled, skipping to next", interceptor.getClass().getSimpleName());
resultCode = this.invoke();
} else {
resultCode = interceptor.intercept(DefaultActionInvocation.this);
}
} else {
resultCode = invokeActionOnly();
}
@@ -268,9 +273,7 @@ public class DefaultActionInvocation implements ActionInvocation {
if (preResultListeners != null) {
LOG.trace("Executing PreResultListeners for result [{}]", result);
for (Object preResultListener : preResultListeners) {
PreResultListener listener = (PreResultListener) preResultListener;
for (PreResultListener listener : preResultListeners) {
listener.beforeResult(this, resultCode);
}
}
@@ -314,7 +317,7 @@ public class DefaultActionInvocation implements ActionInvocation {
gripe = "Unable to instantiate Action, " + proxy.getConfig().getClassName() + ", defined for '" + proxy.getActionName() + "' in namespace '" + proxy.getNamespace() + "'";
}
gripe += (((" -- " + e.getMessage()) != null) ? e.getMessage() : " [no message in exception]");
gripe += e.getMessage();
throw new StrutsException(gripe, e, proxy.getConfig());
}
@@ -363,7 +366,7 @@ public class DefaultActionInvocation implements ActionInvocation {
result.execute(this);
} else if (resultCode != null && !Action.NONE.equals(resultCode)) {
throw new ConfigurationException("No result defined for action " + getAction().getClass().getName()
+ " and result " + getResultCode(), proxy.getConfig());
+ " and result " + getResultCode(), proxy.getConfig());
} else {
if (LOG.isDebugEnabled()) {
LOG.debug("No result returned for action {} at {}", getAction().getClass().getName(), proxy.getConfig().getLocation());
@@ -464,6 +467,7 @@ public class DefaultActionInvocation implements ActionInvocation {
/**
* Save the result to be used later.
*
* @param actionConfig current ActionConfig
* @param methodResult the result of the action.
* @return the result code to process.
@@ -476,7 +480,7 @@ public class DefaultActionInvocation implements ActionInvocation {
container.inject(explicitResult);
return null;
} else if (methodResult instanceof Callable) {
asyncAction = (Callable) methodResult;
asyncAction = (Callable<?>) methodResult;
return null;
} else {
return (String) methodResult;
@@ -25,21 +25,31 @@ import com.opensymphony.xwork2.ActionInvocation;
*/
public abstract class AbstractInterceptor implements Interceptor {
private boolean disabled;
/**
* Does nothing
*/
public void init() {
}
/**
* Does nothing
*/
public void destroy() {
}
/**
* Override to handle interception
*/
public abstract String intercept(ActionInvocation invocation) throws Exception;
public void setDisabled(String disable) {
this.disabled = Boolean.parseBoolean(disable);
}
@Override
public boolean isDisabled() {
return this.disabled;
}
}
@@ -219,4 +219,11 @@ public interface Interceptor extends Serializable {
*/
String intercept(ActionInvocation invocation) throws Exception;
/**
* Allows to disable processing a given interceptor
*
* @return true if the given interceptor should be skipped
* @since 6.1.0
*/
boolean isDisabled();
}
@@ -47,12 +47,11 @@ public class CoepInterceptor extends AbstractInterceptor implements PreResultLis
private static final String COEP_REPORT_HEADER = "Cross-Origin-Embedder-Policy-Report-Only";
private final Set<String> exemptedPaths = new HashSet<>();
private boolean disabled = false;
private String header = COEP_ENFORCING_HEADER;
@Override
public String intercept(ActionInvocation invocation) throws Exception {
if (disabled) {
if (this.isDisabled()) {
LOG.trace("COEP interceptor has been disabled");
} else {
invocation.addPreResultListener(this);
@@ -62,7 +61,7 @@ public class CoepInterceptor extends AbstractInterceptor implements PreResultLis
@Override
public void beforeResult(ActionInvocation invocation, String resultCode) {
if (disabled) {
if (this.isDisabled()) {
return;
}
@@ -92,8 +91,4 @@ public class CoepInterceptor extends AbstractInterceptor implements PreResultLis
}
}
public void setDisabled(String value) {
disabled = Boolean.parseBoolean(value);
}
}
@@ -49,12 +49,11 @@ public class CoopInterceptor extends AbstractInterceptor implements PreResultLis
private static final String COOP_HEADER = "Cross-Origin-Opener-Policy";
private final Set<String> exemptedPaths = new HashSet<>();
private boolean disabled = false;
private String mode = SAME_ORIGIN;
@Override
public String intercept(ActionInvocation invocation) throws Exception {
if (disabled) {
if (this.isDisabled()) {
LOG.trace("COOP interceptor has been disabled");
} else {
invocation.addPreResultListener(this);
@@ -64,7 +63,7 @@ public class CoopInterceptor extends AbstractInterceptor implements PreResultLis
@Override
public void beforeResult(ActionInvocation invocation, String resultCode) {
if (disabled) {
if (this.isDisabled()) {
return;
}
HttpServletRequest request = invocation.getInvocationContext().getServletRequest();
@@ -95,7 +94,4 @@ public class CoopInterceptor extends AbstractInterceptor implements PreResultLis
this.mode = mode;
}
public void setDisabled(String value) {
this.disabled = Boolean.parseBoolean(value);
}
}
@@ -55,8 +55,6 @@ public class FetchMetadataInterceptor extends AbstractInterceptor {
private final Set<String> exemptedPaths = new HashSet<>();
private final ResourceIsolationPolicy resourceIsolationPolicy = new StrutsResourceIsolationPolicy();
private boolean disabled = false;
@Inject(required = false)
public void setExemptedPaths(String paths) {
this.exemptedPaths.addAll(TextParseUtil.commaDelimitedStringToSet(paths));
@@ -64,7 +62,7 @@ public class FetchMetadataInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
if (disabled) {
if (this.isDisabled()) {
LOG.trace("Fetch Metadata interceptor has been disabled");
return invocation.invoke();
}
@@ -111,7 +109,4 @@ public class FetchMetadataInterceptor extends AbstractInterceptor {
response.setHeader(VARY_HEADER, VARY_HEADER_VALUE);
}
public void setDisabled(String value) {
this.disabled = Boolean.parseBoolean(value);
}
}
@@ -45,11 +45,9 @@ public final class CspInterceptor extends AbstractInterceptor implements PreResu
private final CspSettings settings = new DefaultCspSettings();
private boolean disabled = false;
@Override
public String intercept(ActionInvocation invocation) throws Exception {
if (disabled) {
if (this.isDisabled()) {
LOG.trace("CSP interceptor has been disabled");
} else {
invocation.addPreResultListener(this);
@@ -58,7 +56,7 @@ public final class CspInterceptor extends AbstractInterceptor implements PreResu
}
public void beforeResult(ActionInvocation invocation, String resultCode) {
if (disabled) {
if (this.isDisabled()) {
return;
}
HttpServletRequest request = invocation.getInvocationContext().getServletRequest();
@@ -93,7 +91,4 @@ public final class CspInterceptor extends AbstractInterceptor implements PreResu
settings.setEnforcingMode(enforcingMode);
}
public void setDisabled(String value) {
this.disabled = Boolean.parseBoolean(value);
}
}
@@ -26,6 +26,8 @@ import com.opensymphony.xwork2.interceptor.PreResultListener;
import com.opensymphony.xwork2.mock.MockActionProxy;
import com.opensymphony.xwork2.mock.MockInterceptor;
import com.opensymphony.xwork2.mock.MockResult;
import com.opensymphony.xwork2.ognl.DefaultOgnlBeanInfoCacheFactory;
import com.opensymphony.xwork2.ognl.DefaultOgnlExpressionCacheFactory;
import com.opensymphony.xwork2.ognl.OgnlUtil;
import com.opensymphony.xwork2.util.ValueStack;
import com.opensymphony.xwork2.util.ValueStackFactory;
@@ -90,6 +92,36 @@ public class DefaultActionInvocationTest extends XWorkTestCase {
}
}
public void testInvokeWithDisabledInterceptors() throws Exception {
// given
List<InterceptorMapping> interceptorMappings = new ArrayList<>();
MockInterceptor mockInterceptor1 = new MockInterceptor();
mockInterceptor1.setFoo("test1");
mockInterceptor1.setExpectedFoo("test1");
interceptorMappings.add(new InterceptorMapping("test1", mockInterceptor1));
MockInterceptor mockInterceptor2 = new MockInterceptor();
interceptorMappings.add(new InterceptorMapping("test2", mockInterceptor2));
mockInterceptor2.setDisabled("true");
MockInterceptor mockInterceptor3 = new MockInterceptor();
interceptorMappings.add(new InterceptorMapping("test3", mockInterceptor3));
mockInterceptor3.setFoo("test3");
mockInterceptor3.setExpectedFoo("test3");
// when
DefaultActionInvocation defaultActionInvocation = new DefaultActionInvocationTester(interceptorMappings);
container.inject(defaultActionInvocation);
defaultActionInvocation.stack = container.getInstance(ValueStackFactory.class).createValueStack();
defaultActionInvocation.setResultCode("");
defaultActionInvocation.invoke();
// then
assertTrue(mockInterceptor1.isExecuted());
assertFalse(mockInterceptor2.isExecuted());
assertTrue(mockInterceptor3.isExecuted());
assertTrue(defaultActionInvocation.isExecuted());
}
public void testInvokingExistingExecuteMethod() throws Exception {
// given
DefaultActionInvocation dai = new DefaultActionInvocation(ActionContext.getContext().getContextMap(), false);
@@ -106,7 +138,7 @@ public class DefaultActionInvocationTest extends XWorkTestCase {
dai.stack = container.getInstance(ValueStackFactory.class).createValueStack();
dai.proxy = proxy;
dai.ognlUtil = new OgnlUtil();
dai.ognlUtil = createOgnlUtil();
// when
String result = dai.invokeAction(action, null);
@@ -138,7 +170,7 @@ public class DefaultActionInvocationTest extends XWorkTestCase {
dai.stack = container.getInstance(ValueStackFactory.class).createValueStack();
dai.proxy = proxy;
dai.ognlUtil = new OgnlUtil();
dai.ognlUtil = createOgnlUtil();
dai.unknownHandlerManager = uhm;
// when
@@ -154,7 +186,7 @@ public class DefaultActionInvocationTest extends XWorkTestCase {
assertTrue(actual instanceof NoSuchMethodException);
}
public void testInvokingExistingMethodThatThrowsException() throws Exception {
public void testInvokingExistingMethodThatThrowsException() {
// given
DefaultActionInvocation dai = new DefaultActionInvocation(ActionContext.getContext().getContextMap(), false);
container.inject(dai);
@@ -170,7 +202,7 @@ public class DefaultActionInvocationTest extends XWorkTestCase {
dai.stack = container.getInstance(ValueStackFactory.class).createValueStack();
dai.proxy = proxy;
dai.ognlUtil = new OgnlUtil();
dai.ognlUtil = createOgnlUtil();
// when
Throwable actual = null;
@@ -185,7 +217,7 @@ public class DefaultActionInvocationTest extends XWorkTestCase {
assertTrue(actual instanceof IllegalArgumentException);
}
public void testUnknownHandlerManagerThatThrowsException() throws Exception {
public void testUnknownHandlerManagerThatThrowsException() {
// given
DefaultActionInvocation dai = new DefaultActionInvocation(ActionContext.getContext().getContextMap(), false);
container.inject(dai);
@@ -207,7 +239,7 @@ public class DefaultActionInvocationTest extends XWorkTestCase {
dai.stack = container.getInstance(ValueStackFactory.class).createValueStack();
dai.proxy = proxy;
dai.ognlUtil = new OgnlUtil();
dai.ognlUtil = createOgnlUtil();
dai.unknownHandlerManager = uhm;
// when
@@ -224,7 +256,7 @@ public class DefaultActionInvocationTest extends XWorkTestCase {
assertTrue(actual instanceof NoSuchMethodException);
}
public void testUnknownHandlerManagerThatReturnsNull() throws Exception {
public void testUnknownHandlerManagerThatReturnsNull() {
// given
DefaultActionInvocation dai = new DefaultActionInvocation(ActionContext.getContext().getContextMap(), false);
container.inject(dai);
@@ -246,7 +278,7 @@ public class DefaultActionInvocationTest extends XWorkTestCase {
dai.stack = container.getInstance(ValueStackFactory.class).createValueStack();
dai.proxy = proxy;
dai.ognlUtil = new OgnlUtil();
dai.ognlUtil = createOgnlUtil();
dai.unknownHandlerManager = uhm;
// when
@@ -284,7 +316,7 @@ public class DefaultActionInvocationTest extends XWorkTestCase {
dai.stack = container.getInstance(ValueStackFactory.class).createValueStack();
dai.proxy = proxy;
dai.ognlUtil = new OgnlUtil();
dai.ognlUtil = createOgnlUtil();
dai.unknownHandlerManager = uhm;
// when
@@ -376,7 +408,7 @@ public class DefaultActionInvocationTest extends XWorkTestCase {
interceptorMappings.add(new InterceptorMapping("test1", mockInterceptor1));
dai.interceptors = interceptorMappings.iterator();
dai.ognlUtil = new OgnlUtil();
dai.ognlUtil = createOgnlUtil();
dai.invoke();
@@ -480,8 +512,14 @@ public class DefaultActionInvocationTest extends XWorkTestCase {
loadConfigurationProviders(configurationProvider);
}
private OgnlUtil createOgnlUtil() {
return new OgnlUtil(
new DefaultOgnlExpressionCacheFactory<>(),
new DefaultOgnlBeanInfoCacheFactory<>()
);
}
private class SimpleActionEventListener implements ActionEventListener {
private static class SimpleActionEventListener implements ActionEventListener {
private final String name;
private final String result;
@@ -507,7 +545,7 @@ public class DefaultActionInvocationTest extends XWorkTestCase {
class DefaultActionInvocationTester extends DefaultActionInvocation {
DefaultActionInvocationTester(List<InterceptorMapping> interceptorMappings) {
super(new HashMap<String, Object>(), false);
super(new HashMap<>(), false);
interceptors = interceptorMappings.iterator();
MockActionProxy actionProxy = new MockActionProxy();
actionProxy.setMethod("execute");
@@ -1,89 +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 com.opensymphony.xwork2;
import com.opensymphony.xwork2.interceptor.Interceptor;
import org.junit.Assert;
/**
* TestInterceptor
*
* @author Jason Carreira
* Created Apr 21, 2003 9:04:06 PM
*/
public class TestInterceptor implements Interceptor {
public static final String DEFAULT_FOO_VALUE = "fooDefault";
private String expectedFoo = DEFAULT_FOO_VALUE;
private String foo = DEFAULT_FOO_VALUE;
private boolean executed = false;
public boolean isExecuted() {
return executed;
}
public void setExpectedFoo(String expectedFoo) {
this.expectedFoo = expectedFoo;
}
public String getExpectedFoo() {
return expectedFoo;
}
public void setFoo(String foo) {
this.foo = foo;
}
public String getFoo() {
return foo;
}
/**
* Called to let an interceptor clean up any resources it has allocated.
*/
public void destroy() {
}
/**
* Called after an Interceptor is created, but before any requests are processed using the intercept() methodName. This
* gives the Interceptor a chance to initialize any needed resources.
*/
public void init() {
}
/**
* Allows the Interceptor to do some processing on the request before and/or after the rest of the processing of the
* request by the DefaultActionInvocation or to short-circuit the processing and just return a String return code.
*
* @param invocation
* @return
* @throws Exception
*/
public String intercept(ActionInvocation invocation) throws Exception {
executed = true;
Assert.assertNotSame(DEFAULT_FOO_VALUE, foo);
Assert.assertEquals(expectedFoo, foo);
return invocation.invoke();
}
}
@@ -25,7 +25,7 @@ import com.opensymphony.xwork2.config.entities.InterceptorConfig;
import com.opensymphony.xwork2.config.entities.InterceptorMapping;
import com.opensymphony.xwork2.config.entities.InterceptorStackConfig;
import com.opensymphony.xwork2.config.entities.PackageConfig;
import com.opensymphony.xwork2.interceptor.Interceptor;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import java.util.Collections;
import java.util.LinkedHashMap;
@@ -33,9 +33,6 @@ import java.util.List;
/**
* <code>InterceptorBuilderTest</code>
*
* @author <a href="mailto:hermanns@aixcept.de">Rainer Hermanns</a>
* @version $Id$
*/
public class InterceptorBuilderTest extends XWorkTestCase {
@@ -46,7 +43,7 @@ public class InterceptorBuilderTest extends XWorkTestCase {
super.setUp();
objectFactory = container.getInstance(ObjectFactory.class);
}
/**
* Try to test this
* <interceptor-ref name="interceptorStack1">
@@ -55,91 +52,84 @@ public class InterceptorBuilderTest extends XWorkTestCase {
* <param name="interceptor2.param1">interceptor2_value1</param>
* <param name="interceptor2.param2">interceptor2_value2</param>
* </interceptor-ref>
*
* @throws Exception
*/
public void testBuildInterceptor_1() throws Exception {
public void testBuildInterceptor_1() {
InterceptorStackConfig interceptorStackConfig1 = new InterceptorStackConfig.Builder("interceptorStack1").build();
InterceptorConfig interceptorConfig1 = new InterceptorConfig.Builder("interceptor1", "com.opensymphony.xwork2.config.providers.InterceptorBuilderTest$MockInterceptor1").build();
InterceptorConfig interceptorConfig2 = new InterceptorConfig.Builder("interceptor2", "com.opensymphony.xwork2.config.providers.InterceptorBuilderTest$MockInterceptor2").build();
PackageConfig packageConfig = new PackageConfig.Builder("package1").namespace("/namespace").addInterceptorConfig(interceptorConfig1).addInterceptorConfig(interceptorConfig2).addInterceptorStackConfig(interceptorStackConfig1).build();
List
interceptorMappings =
InterceptorBuilder.constructInterceptorReference(packageConfig, "interceptorStack1",
new LinkedHashMap<String, String>() {
private static final long serialVersionUID = -1358620486812957895L;
{
put("interceptor1.param1", "interceptor1_value1");
put("interceptor1.param2", "interceptor1_value2");
put("interceptor2.param1", "interceptor2_value1");
put("interceptor2.param2", "interceptor2_value2");
}
},null, objectFactory);
List<InterceptorMapping> interceptorMappings =
InterceptorBuilder.constructInterceptorReference(packageConfig, "interceptorStack1",
new LinkedHashMap<String, String>() {
{
put("interceptor1.param1", "interceptor1_value1");
put("interceptor1.param2", "interceptor1_value2");
put("interceptor2.param1", "interceptor2_value1");
put("interceptor2.param2", "interceptor2_value2");
}
}, null, objectFactory);
assertEquals(interceptorMappings.size(), 2);
assertEquals(((InterceptorMapping) interceptorMappings.get(0)).getName(), "interceptor1");
assertNotNull(((InterceptorMapping) interceptorMappings.get(0)).getInterceptor());
assertEquals(((InterceptorMapping) interceptorMappings.get(0)).getInterceptor().getClass(), MockInterceptor1.class);
assertEquals(((MockInterceptor1) ((InterceptorMapping) interceptorMappings.get(0)).getInterceptor()).getParam1(), "interceptor1_value1");
assertEquals(((MockInterceptor1) ((InterceptorMapping) interceptorMappings.get(0)).getInterceptor()).getParam2(), "interceptor1_value2");
assertEquals(interceptorMappings.get(0).getName(), "interceptor1");
assertNotNull(interceptorMappings.get(0).getInterceptor());
assertEquals(interceptorMappings.get(0).getInterceptor().getClass(), MockInterceptor1.class);
assertEquals(((MockInterceptor1) interceptorMappings.get(0).getInterceptor()).getParam1(), "interceptor1_value1");
assertEquals(((MockInterceptor1) interceptorMappings.get(0).getInterceptor()).getParam2(), "interceptor1_value2");
assertEquals(((InterceptorMapping) interceptorMappings.get(1)).getName(), "interceptor2");
assertNotNull(((InterceptorMapping) interceptorMappings.get(1)).getInterceptor());
assertEquals(((InterceptorMapping) interceptorMappings.get(1)).getInterceptor().getClass(), MockInterceptor2.class);
assertEquals(((MockInterceptor2) ((InterceptorMapping) interceptorMappings.get(1)).getInterceptor()).getParam1(), "interceptor2_value1");
assertEquals(((MockInterceptor2) ((InterceptorMapping) interceptorMappings.get(1)).getInterceptor()).getParam2(), "interceptor2_value2");
assertEquals(interceptorMappings.get(1).getName(), "interceptor2");
assertNotNull(interceptorMappings.get(1).getInterceptor());
assertEquals(interceptorMappings.get(1).getInterceptor().getClass(), MockInterceptor2.class);
assertEquals(((MockInterceptor2) interceptorMappings.get(1).getInterceptor()).getParam1(), "interceptor2_value1");
assertEquals(((MockInterceptor2) interceptorMappings.get(1).getInterceptor()).getParam2(), "interceptor2_value2");
}
public void testMultipleSameInterceptors() throws Exception {
public void testMultipleSameInterceptors() {
InterceptorConfig interceptorConfig1 = new InterceptorConfig.Builder("interceptor1", "com.opensymphony.xwork2.config.providers.InterceptorBuilderTest$MockInterceptor1").build();
InterceptorConfig interceptorConfig2 = new InterceptorConfig.Builder("interceptor2", "com.opensymphony.xwork2.config.providers.InterceptorBuilderTest$MockInterceptor2").build();
InterceptorStackConfig interceptorStackConfig1 = new InterceptorStackConfig.Builder("multiStack")
.addInterceptor(new InterceptorMapping(interceptorConfig1.getName(), objectFactory.buildInterceptor(interceptorConfig1, Collections.<String, String>emptyMap())))
.addInterceptor(new InterceptorMapping(interceptorConfig2.getName(), objectFactory.buildInterceptor(interceptorConfig2, Collections.<String, String>emptyMap())))
.addInterceptor(new InterceptorMapping(interceptorConfig1.getName(), objectFactory.buildInterceptor(interceptorConfig1, Collections.<String, String>emptyMap())))
.build();
.addInterceptor(new InterceptorMapping(interceptorConfig1.getName(), objectFactory.buildInterceptor(interceptorConfig1, Collections.emptyMap())))
.addInterceptor(new InterceptorMapping(interceptorConfig2.getName(), objectFactory.buildInterceptor(interceptorConfig2, Collections.emptyMap())))
.addInterceptor(new InterceptorMapping(interceptorConfig1.getName(), objectFactory.buildInterceptor(interceptorConfig1, Collections.emptyMap())))
.build();
PackageConfig packageConfig = new PackageConfig.Builder("package1")
.namespace("/namespace")
.addInterceptorConfig(interceptorConfig1)
.addInterceptorConfig(interceptorConfig2)
.addInterceptorConfig(interceptorConfig1)
.addInterceptorStackConfig(interceptorStackConfig1)
.build();
.namespace("/namespace")
.addInterceptorConfig(interceptorConfig1)
.addInterceptorConfig(interceptorConfig2)
.addInterceptorConfig(interceptorConfig1)
.addInterceptorStackConfig(interceptorStackConfig1)
.build();
List interceptorMappings = InterceptorBuilder.constructInterceptorReference(packageConfig, "multiStack",
new LinkedHashMap<String, String>() {
{
put("interceptor1.param1", "interceptor1_value1");
put("interceptor1.param2", "interceptor1_value2");
}
}, null, objectFactory);
List<InterceptorMapping> interceptorMappings = InterceptorBuilder.constructInterceptorReference(packageConfig, "multiStack",
new LinkedHashMap<String, String>() {
{
put("interceptor1.param1", "interceptor1_value1");
put("interceptor1.param2", "interceptor1_value2");
}
}, null, objectFactory);
assertEquals(interceptorMappings.size(), 3);
assertEquals(((InterceptorMapping) interceptorMappings.get(0)).getName(), "interceptor1");
assertNotNull(((InterceptorMapping) interceptorMappings.get(0)).getInterceptor());
assertEquals(((InterceptorMapping) interceptorMappings.get(0)).getInterceptor().getClass(), MockInterceptor1.class);
assertEquals(((MockInterceptor1) ((InterceptorMapping) interceptorMappings.get(0)).getInterceptor()).getParam1(), "interceptor1_value1");
assertEquals(((MockInterceptor1) ((InterceptorMapping) interceptorMappings.get(0)).getInterceptor()).getParam2(), "interceptor1_value2");
assertEquals(interceptorMappings.get(0).getName(), "interceptor1");
assertNotNull(interceptorMappings.get(0).getInterceptor());
assertEquals(interceptorMappings.get(0).getInterceptor().getClass(), MockInterceptor1.class);
assertEquals(((MockInterceptor1) interceptorMappings.get(0).getInterceptor()).getParam1(), "interceptor1_value1");
assertEquals(((MockInterceptor1) interceptorMappings.get(0).getInterceptor()).getParam2(), "interceptor1_value2");
assertEquals(((InterceptorMapping) interceptorMappings.get(1)).getName(), "interceptor2");
assertNotNull(((InterceptorMapping) interceptorMappings.get(1)).getInterceptor());
assertEquals(((InterceptorMapping) interceptorMappings.get(1)).getInterceptor().getClass(), MockInterceptor2.class);
assertEquals(interceptorMappings.get(1).getName(), "interceptor2");
assertNotNull(interceptorMappings.get(1).getInterceptor());
assertEquals(interceptorMappings.get(1).getInterceptor().getClass(), MockInterceptor2.class);
assertEquals(((InterceptorMapping) interceptorMappings.get(2)).getName(), "interceptor1");
assertNotNull(((InterceptorMapping) interceptorMappings.get(2)).getInterceptor());
assertEquals(((InterceptorMapping) interceptorMappings.get(2)).getInterceptor().getClass(), MockInterceptor1.class);
assertEquals(((MockInterceptor1) ((InterceptorMapping) interceptorMappings.get(2)).getInterceptor()).getParam1(), "interceptor1_value1");
assertEquals(((MockInterceptor1) ((InterceptorMapping) interceptorMappings.get(2)).getInterceptor()).getParam2(), "interceptor1_value2");
assertEquals(interceptorMappings.get(2).getName(), "interceptor1");
assertNotNull(interceptorMappings.get(2).getInterceptor());
assertEquals(interceptorMappings.get(2).getInterceptor().getClass(), MockInterceptor1.class);
assertEquals(((MockInterceptor1) interceptorMappings.get(2).getInterceptor()).getParam1(), "interceptor1_value1");
assertEquals(((MockInterceptor1) interceptorMappings.get(2).getInterceptor()).getParam2(), "interceptor1_value2");
}
/**
@@ -150,53 +140,45 @@ public class InterceptorBuilderTest extends XWorkTestCase {
* <param name="interceptorStack3.interceptor2.param1">interceptor2_value1</param>
* <param name="interceptorStack3.interceptor2.param2">interceptor2_value2</param>
* </interceptor-ref>
*
* @throws Exception
*/
public void testBuildInterceptor_2() throws Exception {
public void testBuildInterceptor_2() {
InterceptorStackConfig interceptorStackConfig1 = new InterceptorStackConfig.Builder("interceptorStack1").build();
InterceptorStackConfig interceptorStackConfig2 = new InterceptorStackConfig.Builder("interceptorStack2").build();
InterceptorStackConfig interceptorStackConfig3 = new InterceptorStackConfig.Builder("interceptorStack3").build();
InterceptorConfig interceptorConfig1 = new InterceptorConfig.Builder("interceptor1", "com.opensymphony.xwork2.config.providers.InterceptorBuilderTest$MockInterceptor1").build();
InterceptorConfig interceptorConfig2 = new InterceptorConfig.Builder("interceptor2", "com.opensymphony.xwork2.config.providers.InterceptorBuilderTest$MockInterceptor2").build();
PackageConfig packageConfig = new PackageConfig.Builder("package1").namespace("/namespace").
addInterceptorConfig(interceptorConfig1).
addInterceptorConfig(interceptorConfig2).
addInterceptorStackConfig(interceptorStackConfig1).
addInterceptorStackConfig(interceptorStackConfig2).
addInterceptorStackConfig(interceptorStackConfig3).build();
PackageConfig packageConfig = new PackageConfig.Builder("package1").namespace("/namspace").
addInterceptorConfig(interceptorConfig1).
addInterceptorConfig(interceptorConfig2).
addInterceptorStackConfig(interceptorStackConfig1).
addInterceptorStackConfig(interceptorStackConfig2).
addInterceptorStackConfig(interceptorStackConfig3).build();
List interceptorMappings = InterceptorBuilder.constructInterceptorReference(packageConfig, "interceptorStack1",
new LinkedHashMap<String, String>() {
private static final long serialVersionUID = -5819935102242042570L;
{
put("interceptorStack2.interceptor1.param1", "interceptor1_value1");
put("interceptorStack2.interceptor1.param2", "interceptor1_value2");
put("interceptorStack3.interceptor2.param1", "interceptor2_value1");
put("interceptorStack3.interceptor2.param2", "interceptor2_value2");
}
}, null, objectFactory);
List<InterceptorMapping> interceptorMappings = InterceptorBuilder.constructInterceptorReference(packageConfig, "interceptorStack1",
new LinkedHashMap<String, String>() {
{
put("interceptorStack2.interceptor1.param1", "interceptor1_value1");
put("interceptorStack2.interceptor1.param2", "interceptor1_value2");
put("interceptorStack3.interceptor2.param1", "interceptor2_value1");
put("interceptorStack3.interceptor2.param2", "interceptor2_value2");
}
}, null, objectFactory);
assertEquals(interceptorMappings.size(), 2);
assertEquals(((InterceptorMapping) interceptorMappings.get(0)).getName(), "interceptor1");
assertNotNull(((InterceptorMapping) interceptorMappings.get(0)).getInterceptor());
assertEquals(((InterceptorMapping) interceptorMappings.get(0)).getInterceptor().getClass(), MockInterceptor1.class);
assertEquals(((MockInterceptor1) ((InterceptorMapping) interceptorMappings.get(0)).getInterceptor()).getParam1(), "interceptor1_value1");
assertEquals(((MockInterceptor1) ((InterceptorMapping) interceptorMappings.get(0)).getInterceptor()).getParam2(), "interceptor1_value2");
assertEquals(interceptorMappings.get(0).getName(), "interceptor1");
assertNotNull(interceptorMappings.get(0).getInterceptor());
assertEquals(interceptorMappings.get(0).getInterceptor().getClass(), MockInterceptor1.class);
assertEquals(((MockInterceptor1) interceptorMappings.get(0).getInterceptor()).getParam1(), "interceptor1_value1");
assertEquals(((MockInterceptor1) interceptorMappings.get(0).getInterceptor()).getParam2(), "interceptor1_value2");
assertEquals(((InterceptorMapping) interceptorMappings.get(1)).getName(), "interceptor2");
assertNotNull(((InterceptorMapping) interceptorMappings.get(1)).getInterceptor());
assertEquals(((InterceptorMapping) interceptorMappings.get(1)).getInterceptor().getClass(), MockInterceptor2.class);
assertEquals(((MockInterceptor2) ((InterceptorMapping) interceptorMappings.get(1)).getInterceptor()).getParam1(), "interceptor2_value1");
assertEquals(((MockInterceptor2) ((InterceptorMapping) interceptorMappings.get(1)).getInterceptor()).getParam2(), "interceptor2_value2");
assertEquals(interceptorMappings.get(1).getName(), "interceptor2");
assertNotNull(interceptorMappings.get(1).getInterceptor());
assertEquals(interceptorMappings.get(1).getInterceptor().getClass(), MockInterceptor2.class);
assertEquals(((MockInterceptor2) interceptorMappings.get(1).getInterceptor()).getParam1(), "interceptor2_value1");
assertEquals(((MockInterceptor2) interceptorMappings.get(1).getInterceptor()).getParam2(), "interceptor2_value2");
}
/**
@@ -207,72 +189,53 @@ public class InterceptorBuilderTest extends XWorkTestCase {
* <param name="interceptorStack5.interceptor2.param1">interceptor2_value1</param>
* <param name="interceptorStack5.interceptor2.param2">interceptor2_value2</param>
* </interceptor-ref>
*
* @throws Exception
*/
public void testBuildInterceptor_3() throws Exception {
public void testBuildInterceptor_3() {
InterceptorConfig interceptorConfig1 = new InterceptorConfig.Builder("interceptor1", "com.opensymphony.xwork2.config.providers.InterceptorBuilderTest$MockInterceptor1").build();
InterceptorConfig interceptorConfig2 = new InterceptorConfig.Builder("interceptor2", "com.opensymphony.xwork2.config.providers.InterceptorBuilderTest$MockInterceptor2").build();
InterceptorStackConfig interceptorStackConfig1 = new InterceptorStackConfig.Builder("interceptorStack1").build();
InterceptorStackConfig interceptorStackConfig2 = new InterceptorStackConfig.Builder("interceptorStack2").build();
InterceptorStackConfig interceptorStackConfig3 = new InterceptorStackConfig.Builder("interceptorStack3").build();
InterceptorStackConfig interceptorStackConfig4 = new InterceptorStackConfig.Builder("interceptorStack4").build();
InterceptorStackConfig interceptorStackConfig5 = new InterceptorStackConfig.Builder("interceptorStack5").build();
PackageConfig packageConfig = new PackageConfig.Builder("package1").
addInterceptorConfig(interceptorConfig1).
addInterceptorConfig(interceptorConfig2).
addInterceptorStackConfig(interceptorStackConfig1).
addInterceptorStackConfig(interceptorStackConfig2).
addInterceptorStackConfig(interceptorStackConfig3).
addInterceptorStackConfig(interceptorStackConfig4).
addInterceptorStackConfig(interceptorStackConfig5).build();
addInterceptorConfig(interceptorConfig1).
addInterceptorConfig(interceptorConfig2).
addInterceptorStackConfig(interceptorStackConfig1).
addInterceptorStackConfig(interceptorStackConfig2).
addInterceptorStackConfig(interceptorStackConfig3).
addInterceptorStackConfig(interceptorStackConfig4).
addInterceptorStackConfig(interceptorStackConfig5).build();
List interceptorMappings = InterceptorBuilder.constructInterceptorReference(
packageConfig, "interceptorStack1",
new LinkedHashMap<String, String>() {
private static final long serialVersionUID = 4675809753780875525L;
{
put("interceptorStack2.interceptorStack3.interceptorStack4.interceptor1.param1", "interceptor1_value1");
put("interceptorStack2.interceptorStack3.interceptorStack4.interceptor1.param2", "interceptor1_value2");
put("interceptorStack5.interceptor2.param1", "interceptor2_value1");
put("interceptorStack5.interceptor2.param2", "interceptor2_value2");
}
}, null, objectFactory);
List<InterceptorMapping> interceptorMappings = InterceptorBuilder.constructInterceptorReference(
packageConfig, "interceptorStack1",
new LinkedHashMap<String, String>() {
{
put("interceptorStack2.interceptorStack3.interceptorStack4.interceptor1.param1", "interceptor1_value1");
put("interceptorStack2.interceptorStack3.interceptorStack4.interceptor1.param2", "interceptor1_value2");
put("interceptorStack5.interceptor2.param1", "interceptor2_value1");
put("interceptorStack5.interceptor2.param2", "interceptor2_value2");
}
}, null, objectFactory);
assertEquals(interceptorMappings.size(), 2);
assertEquals(((InterceptorMapping) interceptorMappings.get(0)).getName(), "interceptor1");
assertNotNull(((InterceptorMapping) interceptorMappings.get(0)).getInterceptor());
assertEquals(((InterceptorMapping) interceptorMappings.get(0)).getInterceptor().getClass(), MockInterceptor1.class);
assertEquals(((MockInterceptor1) ((InterceptorMapping) interceptorMappings.get(0)).getInterceptor()).getParam1(), "interceptor1_value1");
assertEquals(((MockInterceptor1) ((InterceptorMapping) interceptorMappings.get(0)).getInterceptor()).getParam2(), "interceptor1_value2");
assertEquals(interceptorMappings.get(0).getName(), "interceptor1");
assertNotNull(interceptorMappings.get(0).getInterceptor());
assertEquals(interceptorMappings.get(0).getInterceptor().getClass(), MockInterceptor1.class);
assertEquals(((MockInterceptor1) interceptorMappings.get(0).getInterceptor()).getParam1(), "interceptor1_value1");
assertEquals(((MockInterceptor1) interceptorMappings.get(0).getInterceptor()).getParam2(), "interceptor1_value2");
assertEquals(((InterceptorMapping) interceptorMappings.get(1)).getName(), "interceptor2");
assertNotNull(((InterceptorMapping) interceptorMappings.get(1)).getInterceptor());
assertEquals(((InterceptorMapping) interceptorMappings.get(1)).getInterceptor().getClass(), MockInterceptor2.class);
assertEquals(((MockInterceptor2) ((InterceptorMapping) interceptorMappings.get(1)).getInterceptor()).getParam1(), "interceptor2_value1");
assertEquals(((MockInterceptor2) ((InterceptorMapping) interceptorMappings.get(1)).getInterceptor()).getParam2(), "interceptor2_value2");
assertEquals(interceptorMappings.get(1).getName(), "interceptor2");
assertNotNull(interceptorMappings.get(1).getInterceptor());
assertEquals(interceptorMappings.get(1).getInterceptor().getClass(), MockInterceptor2.class);
assertEquals(((MockInterceptor2) interceptorMappings.get(1).getInterceptor()).getParam1(), "interceptor2_value1");
assertEquals(((MockInterceptor2) interceptorMappings.get(1).getInterceptor()).getParam2(), "interceptor2_value2");
}
public static class MockInterceptor1 implements Interceptor {
private static final long serialVersionUID = 2939902550126175874L;
public static class MockInterceptor1 extends AbstractInterceptor {
private String param1;
private String param2;
@@ -292,19 +255,12 @@ public class InterceptorBuilderTest extends XWorkTestCase {
return this.param2;
}
public void destroy() {
}
public void init() {
}
public String intercept(ActionInvocation invocation) throws Exception {
return invocation.invoke();
}
}
public static class MockInterceptor2 implements Interceptor {
private static final long serialVersionUID = 267427973306989618L;
public static class MockInterceptor2 extends AbstractInterceptor {
private String param1;
private String param2;
@@ -324,12 +280,6 @@ public class InterceptorBuilderTest extends XWorkTestCase {
return this.param2;
}
public void destroy() {
}
public void init() {
}
public String intercept(ActionInvocation invocation) throws Exception {
return invocation.invoke();
}
@@ -19,32 +19,31 @@
package com.opensymphony.xwork2.config.providers;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
/**
*
* @author tm_jee
* @version $Date$ $Id$
*/
public class InterceptorForTestPurpose implements Interceptor {
public class InterceptorForTestPurpose extends AbstractInterceptor {
private String paramOne;
private String paramTwo;
public String getParamOne() { return paramOne; }
public void setParamOne(String paramOne) { this.paramOne = paramOne; }
public String getParamTwo() { return paramTwo; }
public void setParamTwo(String paramTwo) { this.paramTwo = paramTwo; }
public void destroy() {
}
private String paramOne;
private String paramTwo;
public void init() {
}
public String getParamOne() {
return paramOne;
}
public String intercept(ActionInvocation invocation) throws Exception {
return invocation.invoke();
}
public void setParamOne(String paramOne) {
this.paramOne = paramOne;
}
public String getParamTwo() {
return paramTwo;
}
public void setParamTwo(String paramTwo) {
this.paramTwo = paramTwo;
}
public String intercept(ActionInvocation invocation) throws Exception {
return invocation.invoke();
}
}
@@ -1,56 +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 org.junit.Assert;
import org.apache.struts2.TestAction;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
/**
*/
public class ServletDispatchedTestAssertInterceptor implements Interceptor {
private static final long serialVersionUID = 1980347231443329805L;
public ServletDispatchedTestAssertInterceptor() {
super();
}
public void destroy() {
}
public void init() {
}
public String intercept(ActionInvocation invocation) throws Exception {
Assert.assertTrue(invocation.getAction() instanceof TestAction);
TestAction testAction = (TestAction) invocation.getAction();
Assert.assertEquals("bar", testAction.getFoo());
String result = invocation.invoke();
return result;
}
}