[jboss-cvs] JBossAS SVN: r59036 - branches/Branch_4_0/tomcat/src/main/org/jboss/web/tomcat/tc5/session

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Dec 14 05:33:47 EST 2006


Author: jfrederic.clere at jboss.com
Date: 2006-12-14 05:33:45 -0500 (Thu, 14 Dec 2006)
New Revision: 59036

Modified:
   branches/Branch_4_0/tomcat/src/main/org/jboss/web/tomcat/tc5/session/JvmRouteValve.java
Log:
Make sure to use the received sessionid string.
See http://jira.jboss.com/jira/browse/JBAS-3829


Modified: branches/Branch_4_0/tomcat/src/main/org/jboss/web/tomcat/tc5/session/JvmRouteValve.java
===================================================================
--- branches/Branch_4_0/tomcat/src/main/org/jboss/web/tomcat/tc5/session/JvmRouteValve.java	2006-12-14 10:33:36 UTC (rev 59035)
+++ branches/Branch_4_0/tomcat/src/main/org/jboss/web/tomcat/tc5/session/JvmRouteValve.java	2006-12-14 10:33:45 UTC (rev 59036)
@@ -87,6 +87,7 @@
    public void checkJvmRoute(Request req, Response res)
       throws IOException, ServletException
    {
+      String oldsessionId = req.getRequestedSessionId();
       HttpSession session = req.getSession(false);
       if (session != null)
       {
@@ -108,25 +109,33 @@
 
          // Check if incoming session id has JvmRoute appended. If not, append it.
          boolean setCookie = !req.isRequestedSessionIdFromURL();
-         handleJvmRoute(sessionId, jvmRoute, res, setCookie);
+         handleJvmRoute(oldsessionId, sessionId, jvmRoute, res, setCookie);
       }
    }
 
-   protected void handleJvmRoute(String sessionId, 
+   protected void handleJvmRoute(String oldsessionId,
+                                 String sessionId, 
                                  String jvmRoute, 
                                  HttpServletResponse response,
                                  boolean setCookie)
    {
       // Get requested jvmRoute.
       // TODO. The current format is assumed to be id.jvmRoute. Can be generalized later.
+      String receivedJvmRoute = null;
+      int index = oldsessionId.lastIndexOf(".");
+      if (index > 0)
+      {
+         receivedJvmRoute = oldsessionId.substring(index + 1, sessionId.length());
+      }
+
       String requestedJvmRoute = null;
-      int index = sessionId.lastIndexOf(".");
+      index = sessionId.lastIndexOf(".");
       if (index > 0)
       {
          requestedJvmRoute = sessionId.substring(index + 1, sessionId.length());
       }
 
-      String newId = sessionId;
+      String newId = null;
       if (!jvmRoute.equals(requestedJvmRoute))
       {
          if (requestedJvmRoute == null)
@@ -151,9 +160,22 @@
          
          resetSessionId(sessionId, newId);
          
-         if (setCookie)
-            manager_.setNewSessionCookie(newId, response);
       }
+      /* Also check the jvmRoute received (via req.getRequestedSessionId()) */
+      if (!jvmRoute.equals(receivedJvmRoute))
+      {
+            if (log_.isDebugEnabled())
+            {
+               log_.debug("handleJvmRoute(): We have detected a failover with different jvmRoute." +
+                  " received one: " + receivedJvmRoute + " new one: " + jvmRoute + ". Will resent the session id.");
+            }
+            String base = sessionId.substring(0, index);
+            newId = base + "." + jvmRoute;
+      }
+
+      /* Change the sessionid cookie if needed */
+      if (setCookie && newId != null)
+         manager_.setNewSessionCookie(newId, response);
    }
    
    private void resetSessionId(String oldId, String newId)




More information about the jboss-cvs-commits mailing list