[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