一道老题,请高手回答,session失效的问题

我想实现web应用程序的session失效后自动跳转到login.jsp页面,该如何实现,不想在每个jsp页面都加判断,或加jsp标签的方法实现。
最后是通过监听器来实现,在网上看了好长时间,也没有真正的解决办法.
[b]问题补充:[/b]
我想实现web应用程序的session失效后自动跳转到login.jsp页面,该如何实现,不想在每个jsp页面都加判断,或者在每个jsp页加自定义标签的方法实现。
1.最好是通过监听器或过滤器来实现,在网上看了好长时间,也没有真正的解决办法.
2.如果用过滤器,用户不做任何操作,30分钟后系统是否会自动跳转?

用过滤器,用户不做任何操作,session过期后也不会自动跳转,但是用户的任何操作都会导致自动跳转。如果想让用户不动也能自动跳转,可以定时刷新客户端。

通过filter实现,用filter过滤所有请求,在filter中判断session中是否有你存的用户信息,如果没有就转到一个logout.jsp页面

你实现HttpSessionListener接口。。
实现sessionDestroyed方法
比如:
public void sessionDestroyed(HttpSessionEvent event){
HttpServletRequest request=event.getRequest();
HttpServletResponse response = event.getResponse();
event.getSession().getServletContext().getRequestDispatcher( "/login.jsp ").forward(request,response);

}

写一个filter然后判断是否存在用户,没有跳转到logout.jsp

[code="java"]

MyFilter

IsLogin



MyFilter
/*

[/code]

[code="java"]
public class IsLogin implements Filter {

    /**   
      *   Take   this   filter   out   of   service.   
      */   
    public   void   destroy()   {   
    }   
    /**   
      *   Select   and   set   (if   specified)   the   character   encoding   to   be   used   to   
      *   interpret   request   parameters   for   this   request.   
      */   
    public   void   doFilter(ServletRequest request,ServletResponse   response,   
    FilterChain   chain)throws   IOException,   ServletException   {   

    request.getSession.getAttritube("user");
 if(user==null){
   跳转...
 }
    }

    public   void   init(FilterConfig   filterConfig)   throws   ServletException   {   
    }   

}

[/code]

上面是我随手写的,可能会有一点小问题..调试下

写个filter实现吧:

[code="java"]public class AuthenticationFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
                     FilterChain filterChain) throws IOException, ServletException {
    HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
    HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
    if (httpServletRequest.getSession(true).getAttribute("user") == null) {
        httpServletResponse.sendRedirect(httpServletRequest.getContextPath() + "/login.jsp");
        return;
    }
    filterChain.doFilter(servletRequest, servletResponse);
}[/code]

web.xml
[code="xml"]

authenticationFilter
com.xxx.filter.AuthenticationFilter



authenticationFilter
/*

[/code]

晕,这么快

[quote]2.如果用过滤器,用户不做任何操作,30分钟后系统是否会自动跳转? [/quote]
不管你在服务器端做什么手脚,客户端都不会自动跳转的,因为HTTP是无状态的,要想客户端自动跳转,就必须在页面上做手脚

用户不做操作是没办法响应的,
因为http协议就是请求响应的原则,你请求了才会响应