Я написал один фильтр, который аннулирует текущий сеанс и создаст новый сеанс и скопирует атрибуты старой сессии в новый сеанс. Это хорошо работает в tomcat5 и jdk 1,4, но когда я переключил его на tomcat6 и jdk 1.6 после того, как фильтр работает, то для следующего запроса httprequest.getsession(false)
- null
. Почему он ведет себя по-другому в tomcat 6. Пожалуйста, помогите. вот фрагмент кодаhttprequest.getsession возвращает null
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 {
}
}
после аннулирования его. Я создаю новую сессию – aru
и копирую старые атрибуты в новый сеанс. Смотрите приведенный выше код. Я создал файл только для входа в систему. код хорошо работает в tomcat 5, но в tomcat 6 его сеанс настройки null после того, как фильтр выполнен, и он потерял все содержимое. – aru
Вы пытались использовать 'request.getSession()' вместо 'request.getSession (true)'? – icza