You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by rg...@apache.org on 2012/08/03 10:03:13 UTC

svn commit: r1368827 - in /struts/struts2/trunk: ./ core/src/main/java/org/apache/struts2/interceptor/ core/src/main/java/org/apache/struts2/util/ core/src/test/java/org/apache/struts2/util/ core/src/test/java/org/apache/struts2/views/jsp/ui/

Author: rgielen
Date: Fri Aug  3 08:03:12 2012
New Revision: 1368827

URL: http://svn.apache.org/viewvc?rev=1368827&view=rev
Log:
WW-3858
Decouple token names from their respective session attribute names

Modified:
    struts/struts2/trunk/   (props changed)
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/ExecuteAndWaitInterceptor.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/TokenSessionStoreInterceptor.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/TokenHelper.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/util/TokenHelperTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/TokenTagTest.java

Propchange: struts/struts2/trunk/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Fri Aug  3 08:03:12 2012
@@ -6,3 +6,5 @@
 *.iws
 target
 .idea
+
+test-output

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/ExecuteAndWaitInterceptor.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/ExecuteAndWaitInterceptor.java?rev=1368827&r1=1368826&r2=1368827&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/ExecuteAndWaitInterceptor.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/ExecuteAndWaitInterceptor.java Fri Aug  3 08:03:12 2012
@@ -257,8 +257,9 @@ public class ExecuteAndWaitInterceptor e
             if ((!executeAfterValidationPass || !secondTime) && bp != null && !bp.isDone()) {
                 actionInvocation.getStack().push(bp.getAction());
 
-                if (TokenHelper.getToken() != null) {
-                    session.put(TokenHelper.getTokenName(), TokenHelper.getToken());
+				final String token = TokenHelper.getToken();
+				if (token != null) {
+					TokenHelper.setSessionToken(TokenHelper.getTokenName(), token);
                 }
 
                 Map results = proxy.getConfig().getResults();

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/TokenSessionStoreInterceptor.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/TokenSessionStoreInterceptor.java?rev=1368827&r1=1368826&r2=1368827&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/TokenSessionStoreInterceptor.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/TokenSessionStoreInterceptor.java Fri Aug  3 08:03:12 2012
@@ -121,7 +121,8 @@ public class TokenSessionStoreIntercepto
             params.remove(tokenName);
             params.remove(TokenHelper.TOKEN_NAME_FIELD);
 
-            ActionInvocation savedInvocation = InvocationSessionStore.loadInvocation(tokenName, token);
+			String sessionTokenName = TokenHelper.buildTokenSessionAttributeName(tokenName);
+            ActionInvocation savedInvocation = InvocationSessionStore.loadInvocation(sessionTokenName, token);
 
             if (savedInvocation != null) {
                 // set the valuestack to the request scope
@@ -157,7 +158,8 @@ public class TokenSessionStoreIntercepto
         // we know the token name and token must be there
         String key = TokenHelper.getTokenName();
         String token = TokenHelper.getToken(key);
-        InvocationSessionStore.storeInvocation(key, token, invocation);
+		String sessionTokenName = TokenHelper.buildTokenSessionAttributeName(key);
+		InvocationSessionStore.storeInvocation(sessionTokenName, token, invocation);
 
         return invocation.invoke();
     }

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/TokenHelper.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/TokenHelper.java?rev=1368827&r1=1368826&r2=1368827&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/TokenHelper.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/TokenHelper.java Fri Aug  3 08:03:12 2012
@@ -36,10 +36,15 @@ import com.opensymphony.xwork2.util.logg
  */
 public class TokenHelper {
 
-    /**
+	/**
+	 * The default namespace for storing token session values
+	 */
+	public static final String TOKEN_NAMESPACE = "struts.tokens";
+
+	/**
      * The default name to map the token value
      */
-    public static final String DEFAULT_TOKEN_NAME = "struts.token";
+    public static final String DEFAULT_TOKEN_NAME = "token";
 
     /**
      * The name of the field which will hold the token name
@@ -58,31 +63,53 @@ public class TokenHelper {
         return setToken(DEFAULT_TOKEN_NAME);
     }
 
-    /**
-     * Sets a transaction token into the session using the provided token name.
-     *
-     * @param tokenName the name to store into the session with the token as the value
-     * @return the token string
-     */
-    public static String setToken(String tokenName) {
-        Map session = ActionContext.getContext().getSession();
-        String token = generateGUID();
-        try {
-            session.put(tokenName, token);
-        }
-        catch(IllegalStateException e) {
-            // WW-1182 explain to user what the problem is
-            String msg = "Error creating HttpSession due response is commited to client. You can use the CreateSessionInterceptor or create the HttpSession from your action before the result is rendered to the client: " + e.getMessage();
-            LOG.error(msg, e);
-            throw new IllegalArgumentException(msg);
-        }
-
-        return token;
-    }
-
+	/**
+	 * Sets a transaction token into the session based on the provided token name.
+	 *
+	 * @param tokenName the token name based on which a generated token value is stored into session; for actual session
+	 *                  store, this name will be prefixed by a namespace.
+	 *
+	 * @return the token string
+	 */
+	public static String setToken( String tokenName ) {
+		String token = generateGUID();
+		setSessionToken(tokenName, token);
+		return token;
+	}
+
+	/**
+	 * Put a given named token into the session map. The token will be stored with a namespace prefix prepended.
+	 *
+	 * @param tokenName the token name based on which given token value is stored into session; for actual session store,
+	 *                  this name will be prefixed by a namespace.
+	 * @param token     the token value to store
+	 */
+	public static void setSessionToken( String tokenName, String token ) {
+		Map<String, Object> session = ActionContext.getContext().getSession();
+		try {
+			session.put(buildTokenSessionAttributeName(tokenName), token);
+		} catch ( IllegalStateException e ) {
+			// WW-1182 explain to user what the problem is
+			String msg = "Error creating HttpSession due response is commited to client. You can use the CreateSessionInterceptor or create the HttpSession from your action before the result is rendered to the client: " + e.getMessage();
+			LOG.error(msg, e);
+			throw new IllegalArgumentException(msg);
+		}
+	}
+
+
+	/**
+	 * Build a name-spaced token session attribute name based on the given token name.
+	 *
+	 * @param tokenName the token name to prefix
+	 *
+	 * @return the name space prefixed session token name
+	 */
+	public static String buildTokenSessionAttributeName( String tokenName ) {
+		return TOKEN_NAMESPACE + "." + tokenName;
+	}
 
-    /**
-     * Gets a transaction token into the session using the default token name.
+	/**
+     * Gets a transaction token from the params in the ServletActionContext using the default token name.
      *
      * @return token
      */
@@ -175,7 +202,8 @@ public class TokenHelper {
         }
 
         Map session = ActionContext.getContext().getSession();
-        String sessionToken = (String) session.get(tokenName);
+		String tokenSessionName = buildTokenSessionAttributeName(tokenName);
+        String sessionToken = (String) session.get(tokenSessionName);
 
         if (!token.equals(sessionToken)) {
             if (LOG.isWarnEnabled()) {
@@ -188,7 +216,7 @@ public class TokenHelper {
         }
 
         // remove the token so it won't be used again
-        session.remove(tokenName);
+        session.remove(tokenSessionName);
 
         return true;
     }

Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/util/TokenHelperTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/util/TokenHelperTest.java?rev=1368827&r1=1368826&r2=1368827&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/test/java/org/apache/struts2/util/TokenHelperTest.java (original)
+++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/util/TokenHelperTest.java Fri Aug  3 08:03:12 2012
@@ -38,22 +38,38 @@ public class TokenHelperTest extends Tes
 
     private Map session;
 
+	public void testTokenSessionNameBuilding() throws Exception {
+		String name = "foo";
+		String sessionName = TokenHelper.buildTokenSessionAttributeName(name);
+		assertEquals(TokenHelper.TOKEN_NAMESPACE + "." + name, sessionName);
+	}
 
     public void testSetToken() {
         String token = TokenHelper.setToken();
-        assertEquals(token, session.get(TokenHelper.DEFAULT_TOKEN_NAME));
+		final String defaultSessionTokenName = TokenHelper.buildTokenSessionAttributeName(TokenHelper.DEFAULT_TOKEN_NAME);
+		assertEquals(token, session.get(defaultSessionTokenName));
     }
 
     public void testSetTokenWithName() {
         String tokenName = "myTestToken";
         String token = TokenHelper.setToken(tokenName);
-        assertEquals(token, session.get(tokenName));
+		final String sessionTokenName = TokenHelper.buildTokenSessionAttributeName(tokenName);
+		assertEquals(token, session.get(sessionTokenName));
     }
 
-    public void testValidToken() {
+	public void testSetSessionToken() {
+		String tokenName = "myOtherTestToken";
+		String token = "foobar";
+		TokenHelper.setSessionToken(tokenName, token);
+		final String sessionTokenName = TokenHelper.buildTokenSessionAttributeName(tokenName);
+		assertEquals(token, session.get(sessionTokenName));
+	}
+
+	public void testValidToken() {
         String tokenName = "validTokenTest";
         String token = TokenHelper.setToken(tokenName);
-        assertEquals(token, session.get(tokenName));
+		final String sessionTokenName = TokenHelper.buildTokenSessionAttributeName(tokenName);
+		assertEquals(token, session.get(sessionTokenName));
         ActionContext.getContext().getParameters().put(TokenHelper.TOKEN_NAME_FIELD, new String[]{tokenName});
         ActionContext.getContext().getParameters().put(tokenName, new String[]{token});
         assertTrue(TokenHelper.validToken());

Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/TokenTagTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/TokenTagTest.java?rev=1368827&r1=1368826&r2=1368827&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/TokenTagTest.java (original)
+++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/TokenTagTest.java Fri Aug  3 08:03:12 2012
@@ -63,7 +63,7 @@ public class TokenTagTest extends Abstra
         doTokenTest(tokenName, tag);
 
         String s = writer.toString();
-        assertTrue(s.indexOf("name=\"" + TokenHelper.DEFAULT_TOKEN_NAME) > -1);
+        assertTrue(s.indexOf("name=\"" + TokenHelper.TOKEN_NAME_FIELD) > -1);
         assertTrue(s.indexOf("value=\"" + tokenName + "\"") > -1);
         assertTrue(s.indexOf("name=\"" + tokenName + "\"") > -1);
 
@@ -87,8 +87,9 @@ public class TokenTagTest extends Abstra
             tag.doEndTag();
 
             token = (String) context.get(tokenName);
-            assertNotNull(token);
-            assertEquals(token, pageContext.getSession().getAttribute(tokenName));
+			assertNotNull(token);
+			final String sessionTokenName = TokenHelper.buildTokenSessionAttributeName(tokenName);
+			assertEquals(token, pageContext.getSession().getAttribute(sessionTokenName));
         } catch (JspException e) {
             e.printStackTrace();
             fail();