Author: husted
Date: Mon Mar 12 13:25:06 2007
New Revision: 517374
URL: http://svn.apache.org/viewvc?view=rev&rev=517374
Log:
WW-1678 - Port cookie interceptor from WW 2.2.5. Patch submitted by Nate Drake
based on code contributed to WebWork2/Open Symphony by Toby Jee and Mathew
Payne.
Added:
struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/interceptor/CookieInterceptor.java
struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/interceptor/CookiesAware.java
struts/struts2/branches/STRUTS_2_0_X/core/src/test/java/org/apache/struts2/interceptor/CookieInterceptorTest.java
Added:
struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/interceptor/CookieInterceptor.java
URL:
http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/interceptor/CookieInterceptor.java?view=auto&rev=517374
==============================================================================
---
struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/interceptor/CookieInterceptor.java
(added)
+++
struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/interceptor/CookieInterceptor.java
Mon Mar 12 13:25:06 2007
@@ -0,0 +1,275 @@
+/*
+ * $Id: $
+ *
+ * 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.interceptor;
+
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.apache.struts2.ServletActionContext;
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.ActionInvocation;
+import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
+import com.opensymphony.xwork2.util.ValueStack;
+import com.opensymphony.xwork2.util.TextParseUtil;
+
+/**
+ * <!-- START SNIPPET: description -->
+ *
+ * The aim of this interceptor is to set values in the stack/action based on
cookie name/value
+ * of interest. <p/>
+ *
+ * If an asterik is present in cookiesName parameter, it will be assume that
+ * all cookies name are to be injected into struts' action, even though
+ * cookiesName is comma-separated by other values, eg (cookie1,*,cookie2). <p/>
+ *
+ * If cookiesName is left empty it will assume that no cookie will be injected
+ * into Struts' action. <p/>
+ *
+ * If an asterik is present in cookiesValue parameter, it will assume that all
+ * cookies name irrespective of its value will be injected into Struts' action
so
+ * long as the cookie name matches those specified in cookiesName
parameter.<p/>
+ *
+ * If cookiesValue is left empty it will assume that all cookie that match the
cookieName
+ * parameter will be injected into Struts' action.<p/>
+ *
+ * The action could implements [EMAIL PROTECTED] CookiesAware} in order to
have a [EMAIL PROTECTED] Map}
+ * of filtered cookies set into it. <p/>
+ *
+ * <!-- END SNIPPET: description -->
+ *
+ *
+ * <!-- START SNIPPET: parameters -->
+ *
+ * <ul>
+ * <li>cookiesName (mandatory) - Name of cookies to be injected into the
action. If more
+ * than one
cookie name is desired it could be comma-separated.
+ * If all
cookies name is desired, it could simply be *, an asterik.
+ * When many
cookies name are comma-separated either of the cookie
+ * that match the name
in the comma-separated list will be qualified.</li>
+ * <li>cookiesValue (mandatory) - Value of cookies that if its name
matches cookieName attribute
+ * and its value
matched this, will be injected into Struts'
+ * action. If more
than one cookie name is desired it could be
+ * comma-separated. If
left empty, it will assume any value would
+ * be ok. If more than
one value is specified (comma-separated)
+ * it will assume a
match if either value is matched.
+ * </ul>
+ *
+ * <!-- END SNIPPET: parameters -->
+ *
+ *
+ * <!-- START SNIPPET: extending -->
+ *
+ * <ul>
+ * populateCookieValueIntoStack - this method will decide if this cookie
value is qualified to be
+ *
populated into the value stack (hence into the
action itself)
+ * injectIntoCookiesAwareAction - this method will inject selected
cookies (as a java.util.Map) into
+ *
action that implements [EMAIL PROTECTED]
CookiesAware}.
+ * </ul>
+ *
+ * <!-- END SNIPPET: extending -->
+ *
+ * <pre>
+ * <!-- START SNIPPET: example -->
+ *
+ * <!--
+ * This example will inject cookies named either 'cookie1' or 'cookie2' whose
+ * value could be either 'cookie1value' or 'cookie2value' into Struts'
action.
+ * -->
+ * <action ... >
+ * <interceptor-ref name="cookie">
+ * <param name="cookiesName">cookie1, cookie2</param>
+ * <param name="cookiesValue">cookie1value,
cookie2value</param>
+ * </interceptor-ref>
+ * ....
+ * </action>
+ *
+ *
+ * <!--
+ * This example will inject cookies named either 'cookie1' or 'cookie2'
+ * regardless of their value into Struts' action.
+ * -->
+ * <action ... >
+ * <interceptor-ref name="cookie">
+ * <param name="cookiesName">cookie1, cookie2</param>
+ * <param name="cookiesValue">*</param>
+ * <interceptor-ref>
+ * ...
+ * </action>
+ *
+ *
+ * <!--
+ * This example will inject cookies named either 'cookie1' with value
+ * 'cookie1value' or 'cookie2' with value 'cookie2value' into Struts'
+ * action.
+ * -->
+ * <action ... >
+ * <interceptor-ref name="cookie">
+ * <param name="cookiesName">cookie1</param>
+ * <param name="cookiesValue">cookie1value</param>
+ * </interceptor-ref>
+ * <interceptor-ref name="cookie">
+ * <param name="cookiesName"<cookie2</param>
+ * <param name="cookiesValue">cookie2value</param>
+ * </interceptor-ref>
+ * ....
+ * </action>
+ *
+ * <!--
+ * This example will inject any cookies regardless of its value into
+ * Struts' action.
+ * -->
+ * <action ... >
+ * <interceptor-ref name="cookie">
+ * <param name="cookiesName">*</param>
+ * <param name="cookiesValue">*</param>
+ * </interceptor-ref>
+ * ...
+ * </action>
+ *
+ * <!-- END SNIPPET: example -->
+ * </pre>
+ *
+ * @see CookiesAware
+ */
+public class CookieInterceptor extends AbstractInterceptor {
+
+ private static final long serialVersionUID = 4153142432948747305L;
+
+ private static final Log LOG = LogFactory.getLog(CookieInterceptor.class);
+
+ private Set cookiesNameSet = Collections.EMPTY_SET;
+ private Set cookiesValueSet = Collections.EMPTY_SET;
+
+ /**
+ * Set the <code>cookiesName</code> which if matche will allow the cookie
+ * to be injected into action, could be comma-separated string.
+ *
+ * @param cookiesName
+ */
+ public void setCookiesName(String cookiesName) {
+ if (cookiesName != null)
+ this.cookiesNameSet =
TextParseUtil.commaDelimitedStringToSet(cookiesName);
+ }
+
+ /**
+ * Set the <code>cookiesValue</code> which if matched (together with
matching
+ * cookiesName) will caused the cookie to be injected into action, could be
+ * comma-separated string.
+ *
+ * @param cookiesValue
+ */
+ public void setCookiesValue(String cookiesValue) {
+ if (cookiesValue != null)
+ this.cookiesValueSet =
TextParseUtil.commaDelimitedStringToSet(cookiesValue);
+ }
+
+
+ public String intercept(ActionInvocation invocation) throws Exception {
+
+ if (LOG.isDebugEnabled())
+ LOG.debug("start interception");
+
+ final ValueStack stack = ActionContext.getContext().getValueStack();
+ HttpServletRequest request = ServletActionContext.getRequest();
+
+ // contains selected cookies
+ Map cookiesMap = new LinkedHashMap();
+
+ Cookie cookies[] = request.getCookies();
+ for (int a=0; a< cookies.length; a++) {
+ String name = cookies[a].getName();
+ String value = cookies[a].getValue();
+
+ if (cookiesNameSet.contains("*")) {
+ if (LOG.isDebugEnabled())
+ LOG.debug("contains cookie name [*] in configured cookies
name set, cookie with name ["+name+"] with value ["+value+"] will be injected");
+ populateCookieValueIntoStack(name, value, cookiesMap, stack);
+ }
+ else if (cookiesNameSet.contains(cookies[a].getName())) {
+ populateCookieValueIntoStack(name, value, cookiesMap, stack);
+ }
+ }
+
+ injectIntoCookiesAwareAction(invocation.getAction(), cookiesMap);
+
+ return invocation.invoke();
+ }
+
+ /**
+ * Hook that populate cookie value into value stack (hence the action)
+ * if the criteria is satisfied (if the cookie value matches with those
configured).
+ *
+ * @param cookieName
+ * @param cookieValue
+ * @param cookiesMap
+ * @param stack
+ */
+ protected void populateCookieValueIntoStack(String cookieName, String
cookieValue, Map cookiesMap, ValueStack stack) {
+ if (cookiesValueSet.isEmpty() || cookiesValueSet.contains("*")) {
+ // If the interceptor is configured to accept any cookie value
+ // OR
+ // no cookiesValue is defined, so as long as the cookie name match
+ // we'll inject it into Struts' action
+ if (LOG.isDebugEnabled()) {
+ if (cookiesValueSet.isEmpty())
+ LOG.debug("no cookie value is configured, cookie with name
["+cookieName+"] with value ["+cookieValue+"] will be injected");
+ else if (cookiesValueSet.contains("*"))
+ LOG.debug("interceptor is configured to accept any value,
cookie with name ["+cookieName+"] with value ["+cookieValue+"] will be
injected");
+ }
+ cookiesMap.put(cookieName, cookieValue);
+ stack.setValue(cookieName, cookieValue);
+ }
+ else {
+ // if cookiesValues is specified, the cookie's value must match
before we
+ // inject them into Struts' action
+ if (cookiesValueSet.contains(cookieValue)) {
+ if (LOG.isDebugEnabled())
+ LOG.debug("both configured cookie name and value matched,
cookie ["+cookieName+"] with value ["+cookieValue+"] will be injected");
+ cookiesMap.put(cookieName, cookieValue);
+ stack.setValue(cookieName, cookieValue);
+ }
+ }
+ }
+
+ /**
+ * Hook that set the <code>cookiesMap</code> into action that implements
+ * [EMAIL PROTECTED] CookiesAware}.
+ *
+ * @param action
+ * @param cookiesMap
+ */
+ protected void injectIntoCookiesAwareAction(Object action, Map cookiesMap)
{
+ if (action instanceof CookiesAware) {
+ if (LOG.isDebugEnabled())
+ LOG.debug("action ["+action+"] implements CookiesAware,
injecting cookies map ["+cookiesMap+"]");
+ ((CookiesAware)action).setCookiesMap(cookiesMap);
+ }
+ }
+
+}
Added:
struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/interceptor/CookiesAware.java
URL:
http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/interceptor/CookiesAware.java?view=auto&rev=517374
==============================================================================
---
struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/interceptor/CookiesAware.java
(added)
+++
struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/interceptor/CookiesAware.java
Mon Mar 12 13:25:06 2007
@@ -0,0 +1,27 @@
+/*
+ * $Id: $
+ *
+ * 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.interceptor;
+
+import java.util.Map;
+
+public interface CookiesAware {
+ void setCookiesMap(Map cookies);
+}
Added:
struts/struts2/branches/STRUTS_2_0_X/core/src/test/java/org/apache/struts2/interceptor/CookieInterceptorTest.java
URL:
http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_2_0_X/core/src/test/java/org/apache/struts2/interceptor/CookieInterceptorTest.java?view=auto&rev=517374
==============================================================================
---
struts/struts2/branches/STRUTS_2_0_X/core/src/test/java/org/apache/struts2/interceptor/CookieInterceptorTest.java
(added)
+++
struts/struts2/branches/STRUTS_2_0_X/core/src/test/java/org/apache/struts2/interceptor/CookieInterceptorTest.java
Mon Mar 12 13:25:06 2007
@@ -0,0 +1,345 @@
+/*
+ * $Id: $
+ *
+ * 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.interceptor;
+
+import java.util.Collections;
+import java.util.Map;
+
+import javax.servlet.http.Cookie;
+
+import org.easymock.MockControl;
+import org.springframework.mock.web.MockHttpServletRequest;
+
+import org.apache.struts2.ServletActionContext;
+import org.apache.struts2.StrutsTestCase;
+import com.opensymphony.xwork2.Action;
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.ActionInvocation;
+import com.opensymphony.xwork2.ActionSupport;
+
+public class CookieInterceptorTest extends StrutsTestCase {
+
+
+ public void testIntercepDefault() throws Exception {
+ MockHttpServletRequest request = new MockHttpServletRequest();
+ request.setCookies(new Cookie[] {
+ new Cookie("cookie1", "cookie1value"),
+ new Cookie("cookie2", "cookie2value"),
+ new Cookie("cookie3", "cookie3value")
+ });
+ ServletActionContext.setRequest(request);
+
+ MockActionWithCookieAware action = new MockActionWithCookieAware();
+
+ ActionContext.getContext().getValueStack().push(action);
+
+ MockControl actionInvocationControl =
MockControl.createControl(ActionInvocation.class);
+ ActionInvocation invocation = (ActionInvocation)
actionInvocationControl.getMock();
+ actionInvocationControl.expectAndDefaultReturn(
+ invocation.getAction(),
action);
+ actionInvocationControl.expectAndDefaultReturn(
+ invocation.invoke(),
Action.SUCCESS);
+
+ actionInvocationControl.replay();
+
+ // by default the interceptor doesn't accept any cookies
+ CookieInterceptor interceptor = new CookieInterceptor();
+ interceptor.intercept(invocation);
+
+ assertTrue(action.getCookiesMap().isEmpty());
+ assertNull(action.getCookie1(), null);
+ assertNull(action.getCookie2(), null);
+ assertNull(action.getCookie3(), null);
+
assertNull(ActionContext.getContext().getValueStack().findValue("cookie1"));
+
assertNull(ActionContext.getContext().getValueStack().findValue("cookie2"));
+
assertNull(ActionContext.getContext().getValueStack().findValue("cookie3"));
+ }
+
+ public void testInterceptAll1() throws Exception {
+ MockHttpServletRequest request = new MockHttpServletRequest();
+ request.setCookies(new Cookie[] {
+ new Cookie("cookie1", "cookie1value"),
+ new Cookie("cookie2", "cookie2value"),
+ new Cookie("cookie3", "cookie3value")
+ });
+ ServletActionContext.setRequest(request);
+
+ MockActionWithCookieAware action = new MockActionWithCookieAware();
+
+ ActionContext.getContext().getValueStack().push(action);
+
+ MockControl actionInvocationControl =
MockControl.createControl(ActionInvocation.class);
+ ActionInvocation invocation = (ActionInvocation)
actionInvocationControl.getMock();
+ actionInvocationControl.expectAndDefaultReturn(
+ invocation.getAction(),
action);
+ actionInvocationControl.expectAndDefaultReturn(
+ invocation.invoke(),
Action.SUCCESS);
+
+ actionInvocationControl.replay();
+
+ CookieInterceptor interceptor = new CookieInterceptor();
+ interceptor.setCookiesName("*");
+ interceptor.setCookiesValue("*");
+ interceptor.intercept(invocation);
+
+ assertFalse(action.getCookiesMap().isEmpty());
+ assertEquals(action.getCookiesMap().size(), 3);
+ assertEquals(action.getCookiesMap().get("cookie1"), "cookie1value");
+ assertEquals(action.getCookiesMap().get("cookie2"), "cookie2value");
+ assertEquals(action.getCookiesMap().get("cookie3"), "cookie3value");
+ assertEquals(action.getCookie1(), "cookie1value");
+ assertEquals(action.getCookie2(), "cookie2value");
+ assertEquals(action.getCookie3(), "cookie3value");
+
assertEquals(ActionContext.getContext().getValueStack().findValue("cookie1"),
"cookie1value");
+
assertEquals(ActionContext.getContext().getValueStack().findValue("cookie2"),
"cookie2value");
+
assertEquals(ActionContext.getContext().getValueStack().findValue("cookie3"),
"cookie3value");
+ }
+
+
+ public void testInterceptAll2() throws Exception {
+ MockHttpServletRequest request = new MockHttpServletRequest();
+ request.setCookies(new Cookie[] {
+ new Cookie("cookie1", "cookie1value"),
+ new Cookie("cookie2", "cookie2value"),
+ new Cookie("cookie3", "cookie3value")
+ });
+ ServletActionContext.setRequest(request);
+
+ MockActionWithCookieAware action = new MockActionWithCookieAware();
+
+ ActionContext.getContext().getValueStack().push(action);
+
+ MockControl actionInvocationControl =
MockControl.createControl(ActionInvocation.class);
+ ActionInvocation invocation = (ActionInvocation)
actionInvocationControl.getMock();
+ actionInvocationControl.expectAndDefaultReturn(
+ invocation.getAction(),
action);
+ actionInvocationControl.expectAndDefaultReturn(
+ invocation.invoke(),
Action.SUCCESS);
+
+ actionInvocationControl.replay();
+
+ CookieInterceptor interceptor = new CookieInterceptor();
+ interceptor.setCookiesName("cookie1, cookie2, cookie3");
+ interceptor.setCookiesValue("cookie1value, cookie2value,
cookie3value");
+ interceptor.intercept(invocation);
+
+ assertFalse(action.getCookiesMap().isEmpty());
+ assertEquals(action.getCookiesMap().size(), 3);
+ assertEquals(action.getCookiesMap().get("cookie1"), "cookie1value");
+ assertEquals(action.getCookiesMap().get("cookie2"), "cookie2value");
+ assertEquals(action.getCookiesMap().get("cookie3"), "cookie3value");
+ assertEquals(action.getCookie1(), "cookie1value");
+ assertEquals(action.getCookie2(), "cookie2value");
+ assertEquals(action.getCookie3(), "cookie3value");
+
assertEquals(ActionContext.getContext().getValueStack().findValue("cookie1"),
"cookie1value");
+
assertEquals(ActionContext.getContext().getValueStack().findValue("cookie2"),
"cookie2value");
+
assertEquals(ActionContext.getContext().getValueStack().findValue("cookie3"),
"cookie3value");
+ }
+
+ public void testInterceptSelectedCookiesNameOnly1() throws Exception {
+ MockHttpServletRequest request = new MockHttpServletRequest();
+ request.setCookies(new Cookie[] {
+ new Cookie("cookie1", "cookie1value"),
+ new Cookie("cookie2", "cookie2value"),
+ new Cookie("cookie3", "cookie3value")
+ });
+ ServletActionContext.setRequest(request);
+
+ MockActionWithCookieAware action = new MockActionWithCookieAware();
+
+ ActionContext.getContext().getValueStack().push(action);
+
+ MockControl actionInvocationControl =
MockControl.createControl(ActionInvocation.class);
+ ActionInvocation invocation = (ActionInvocation)
actionInvocationControl.getMock();
+ actionInvocationControl.expectAndDefaultReturn(
+ invocation.getAction(),
action);
+ actionInvocationControl.expectAndDefaultReturn(
+ invocation.invoke(),
Action.SUCCESS);
+
+ actionInvocationControl.replay();
+
+ CookieInterceptor interceptor = new CookieInterceptor();
+ interceptor.setCookiesName("cookie1, cookie3");
+ interceptor.setCookiesValue("cookie1value, cookie2value,
cookie3value");
+ interceptor.intercept(invocation);
+
+ assertFalse(action.getCookiesMap().isEmpty());
+ assertEquals(action.getCookiesMap().size(), 2);
+ assertEquals(action.getCookiesMap().get("cookie1"), "cookie1value");
+ assertEquals(action.getCookiesMap().get("cookie2"), null);
+ assertEquals(action.getCookiesMap().get("cookie3"), "cookie3value");
+ assertEquals(action.getCookie1(), "cookie1value");
+ assertEquals(action.getCookie2(), null);
+ assertEquals(action.getCookie3(), "cookie3value");
+
assertEquals(ActionContext.getContext().getValueStack().findValue("cookie1"),
"cookie1value");
+
assertEquals(ActionContext.getContext().getValueStack().findValue("cookie2"),
null);
+
assertEquals(ActionContext.getContext().getValueStack().findValue("cookie3"),
"cookie3value");
+ }
+
+ public void testInterceptSelectedCookiesNameOnly2() throws Exception {
+ MockHttpServletRequest request = new MockHttpServletRequest();
+ request.setCookies(new Cookie[] {
+ new Cookie("cookie1", "cookie1value"),
+ new Cookie("cookie2", "cookie2value"),
+ new Cookie("cookie3", "cookie3value")
+ });
+ ServletActionContext.setRequest(request);
+
+ MockActionWithCookieAware action = new MockActionWithCookieAware();
+
+ ActionContext.getContext().getValueStack().push(action);
+
+ MockControl actionInvocationControl =
MockControl.createControl(ActionInvocation.class);
+ ActionInvocation invocation = (ActionInvocation)
actionInvocationControl.getMock();
+ actionInvocationControl.expectAndDefaultReturn(
+ invocation.getAction(),
action);
+ actionInvocationControl.expectAndDefaultReturn(
+ invocation.invoke(),
Action.SUCCESS);
+
+ actionInvocationControl.replay();
+
+ CookieInterceptor interceptor = new CookieInterceptor();
+ interceptor.setCookiesName("cookie1, cookie3");
+ interceptor.setCookiesValue("*");
+ interceptor.intercept(invocation);
+
+ assertFalse(action.getCookiesMap().isEmpty());
+ assertEquals(action.getCookiesMap().size(), 2);
+ assertEquals(action.getCookiesMap().get("cookie1"), "cookie1value");
+ assertEquals(action.getCookiesMap().get("cookie2"), null);
+ assertEquals(action.getCookiesMap().get("cookie3"), "cookie3value");
+ assertEquals(action.getCookie1(), "cookie1value");
+ assertEquals(action.getCookie2(), null);
+ assertEquals(action.getCookie3(), "cookie3value");
+
assertEquals(ActionContext.getContext().getValueStack().findValue("cookie1"),
"cookie1value");
+
assertEquals(ActionContext.getContext().getValueStack().findValue("cookie2"),
null);
+
assertEquals(ActionContext.getContext().getValueStack().findValue("cookie3"),
"cookie3value");
+ }
+
+ public void testInterceptSelectedCookiesNameOnly3() throws Exception {
+ MockHttpServletRequest request = new MockHttpServletRequest();
+ request.setCookies(new Cookie[] {
+ new Cookie("cookie1", "cookie1value"),
+ new Cookie("cookie2", "cookie2value"),
+ new Cookie("cookie3", "cookie3value")
+ });
+ ServletActionContext.setRequest(request);
+
+ MockActionWithCookieAware action = new MockActionWithCookieAware();
+
+ ActionContext.getContext().getValueStack().push(action);
+
+ MockControl actionInvocationControl =
MockControl.createControl(ActionInvocation.class);
+ ActionInvocation invocation = (ActionInvocation)
actionInvocationControl.getMock();
+ actionInvocationControl.expectAndDefaultReturn(
+ invocation.getAction(),
action);
+ actionInvocationControl.expectAndDefaultReturn(
+ invocation.invoke(),
Action.SUCCESS);
+
+ actionInvocationControl.replay();
+
+ CookieInterceptor interceptor = new CookieInterceptor();
+ interceptor.setCookiesName("cookie1, cookie3");
+ interceptor.setCookiesValue("");
+ interceptor.intercept(invocation);
+
+ assertFalse(action.getCookiesMap().isEmpty());
+ assertEquals(action.getCookiesMap().size(), 2);
+ assertEquals(action.getCookiesMap().get("cookie1"), "cookie1value");
+ assertEquals(action.getCookiesMap().get("cookie2"), null);
+ assertEquals(action.getCookiesMap().get("cookie3"), "cookie3value");
+ assertEquals(action.getCookie1(), "cookie1value");
+ assertEquals(action.getCookie2(), null);
+ assertEquals(action.getCookie3(), "cookie3value");
+
assertEquals(ActionContext.getContext().getValueStack().findValue("cookie1"),
"cookie1value");
+
assertEquals(ActionContext.getContext().getValueStack().findValue("cookie2"),
null);
+
assertEquals(ActionContext.getContext().getValueStack().findValue("cookie3"),
"cookie3value");
+ }
+
+
+ public void testInterceptSelectedCookiesNameAndValue() throws Exception {
+ MockHttpServletRequest request = new MockHttpServletRequest();
+ request.setCookies(new Cookie[] {
+ new Cookie("cookie1", "cookie1value"),
+ new Cookie("cookie2", "cookie2value"),
+ new Cookie("cookie3", "cookie3value")
+ });
+ ServletActionContext.setRequest(request);
+
+ MockActionWithCookieAware action = new MockActionWithCookieAware();
+
+ ActionContext.getContext().getValueStack().push(action);
+
+ MockControl actionInvocationControl =
MockControl.createControl(ActionInvocation.class);
+ ActionInvocation invocation = (ActionInvocation)
actionInvocationControl.getMock();
+ actionInvocationControl.expectAndDefaultReturn(
+ invocation.getAction(),
action);
+ actionInvocationControl.expectAndDefaultReturn(
+ invocation.invoke(),
Action.SUCCESS);
+
+ actionInvocationControl.replay();
+
+ CookieInterceptor interceptor = new CookieInterceptor();
+ interceptor.setCookiesName("cookie1, cookie3");
+ interceptor.setCookiesValue("cookie1value");
+ interceptor.intercept(invocation);
+
+ assertFalse(action.getCookiesMap().isEmpty());
+ assertEquals(action.getCookiesMap().size(), 1);
+ assertEquals(action.getCookiesMap().get("cookie1"), "cookie1value");
+ assertEquals(action.getCookiesMap().get("cookie2"), null);
+ assertEquals(action.getCookiesMap().get("cookie3"), null);
+ assertEquals(action.getCookie1(), "cookie1value");
+ assertEquals(action.getCookie2(), null);
+ assertEquals(action.getCookie3(), null);
+
assertEquals(ActionContext.getContext().getValueStack().findValue("cookie1"),
"cookie1value");
+
assertEquals(ActionContext.getContext().getValueStack().findValue("cookie2"),
null);
+
assertEquals(ActionContext.getContext().getValueStack().findValue("cookie3"),
null);
+ }
+
+
+ public static class MockActionWithCookieAware extends ActionSupport
implements CookiesAware {
+
+ private static final long serialVersionUID = -6202290616812813386L;
+
+ private Map cookies = Collections.EMPTY_MAP;
+ private String cookie1;
+ private String cookie2;
+ private String cookie3;
+
+ public void setCookiesMap(Map cookies) {
+ this.cookies = cookies;
+ }
+ public Map getCookiesMap() {
+ return this.cookies;
+ }
+
+ public String getCookie1() { return cookie1; }
+ public void setCookie1(String cookie1) { this.cookie1 = cookie1; }
+
+ public String getCookie2() { return cookie2; }
+ public void setCookie2(String cookie2) { this.cookie2 = cookie2; }
+
+ public String getCookie3() { return cookie3; }
+ public void setCookie3(String cookie3) { this.cookie3 = cookie3; }
+ }
+
+}