用的是struts框架
过滤器部分代码:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
        throws IOException, ServletException
    {
        HttpServletRequest httpreq = (HttpServletRequest)request;
        HttpSession session = httpreq.getSession();
        String url = httpreq.getRequestURI();
        url = url.substring(url.lastIndexOf("/") + 1, url.length());
        String exclude = "login.do,exit.do";
        if(exclude.indexOf(url) == -1)
        {
            String id = (String)session.getAttribute("id");
            if(id == null || "".equals(id))
            {
                HttpServletResponse httprep = (HttpServletResponse)response;
                httprep.sendRedirect("/chaoshi.jsp");
            } else
            {
                chain.doFilter(request, response);
            }
        } else
        {
            chain.doFilter(request, response);
        }
    }
  
web.xml部分:
 <filter>
  <filter-name>sessionTimeout</filter-name>
  <filter-class>com.filter.SessionTimeout</filter-class>
 </filter>
<filter-mapping>
  <filter-name>sessionTimeout</filter-name>
  <url-pattern>*.do</url-pattern>
 </filter-mapping>登录login.do部分代码:
       HttpSession session = request.getSession(TRUE);
      session.setMaxInactiveInterval(30*60);
      session.setAttribute("id", id);奇怪的现象:
 第一次登录立刻会出现超时,以后再登录就正常了,被这个问题折腾很长时间了,期盼高人指点

解决方案 »

  1.   

    当然了,你第一次登录时,session为null嘛
      

  2.   

    不是的,登录成功了,session里面有值了
      

  3.   


    <filter-mapping> 
      <filter-name>sessionTimeout </filter-name> 
      <url-pattern>*.do </url-pattern> 
    </filter-mapping> 
    是不是死循环了,第一次。
    第一次String url = httpreq.getRequestURI(); 
    不可能有值吧!
    你仔细看看
    希望对你有帮助
    ^_*
      

  4.   

    你第一次登录就要过滤,在你的过滤代码中没有设置
    session.setAttribute("id", id); 
    当然得到的id是null,直接跑到chaoshi.jsp
      

  5.   

     第一次String url = httpreq.getRequestURI() 也是有值的吧
      

  6.   

    login.do是排除在过滤之外的呀
    那应当怎样设置呢
    还望多指点一二
      

  7.   

    在web.xml配 目录过滤啊
    /admin/*
    过滤所有admin 目录下的文件
    path='/admin/a.do'
    那么a.do 就会过滤的
      

  8.   

    session.setMaxInactiveInterval(30*60); 
    不设置也可以啊,默认就是30分钟啊