I have written one filter which would invalidate current session and create new session and copy attributes of old session into new session.
This is working fine in tomcat5 and jdk 1,4 but when i switched it to tomcat6 and jdk 1.6
once the filter is running then for next request httprequest.getsession(false )
is null
. Why its behaving differently in tomcat 6 .
Please help.
here is the code snippet
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException
{
HttpServletRequest httpRequest = (HttpServletRequest) request;
System.out.println("within GenerteNewSessionFilter");
System.out.println("within GenerteNewSessionFilter getRequestURI"+httpRequest.getRequestURI());
System.out.println("within GenerteNewSessionFilter getRequestURL"+httpRequest.getRequestURL());
System.out.println("within GenerteNewSessionFilter session false"+httpRequest.getSession(false));
String reqUrl=httpRequest.getRequestURL().toString();
if (reqUrl==null){
reqUrl="";
}
int idxLogin=reqUrl.indexOf("LoginSubmit.jsp");
int idxReg=reqUrl.indexOf("RegistrationSubmit.jsp");
int idxErr=reqUrl.indexOf("Error");
int idxSave=-1;
System.out.println("within GenerteNewSessionFilter reqUrl "+reqUrl);
System.out.println("within GenerteNewSessionFilter idxLogin index"+idxLogin);
System.out.println("within GenerteNewSessionFilter idxReg index"+idxReg);
System.out.println("within GenerteNewSessionFilter idxErr index"+idxErr);
if (httpRequest.getSession(false) != null && (idxLogin >0 || idxReg >0) && idxErr <0 ){
//copy session attributes from old session to a map.
System.out.println("copy session attributes from old session to a map");
HttpSession session = httpRequest.getSession();
HashMap old=new HashMap();
Enumeration keys = (Enumeration) session.getAttributeNames();
while (keys.hasMoreElements()) {
String key = (String) keys.nextElement();
old.put(key, session.getAttribute(key));
session.removeAttribute(key);
}
System.out.println("old session id "+session.getId());
//invalidate session and create new session.
session.invalidate();
//create new session
session = httpRequest.getSession(true);
//copy session attributes from map session to new session
Iterator it = old.entrySet().iterator(); //iterator
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry)it.next();
//putitng old attributes in to new session
session.setAttribute((String) pairs.getKey(), pairs.getValue());
}//end while loop
System.out.println("end copy session attributes");
System.out.println("new session id status "+httpRequest.getSession(false));
System.out.println("final new session session id "+session.getId());
}
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
}
}