Spring MVC会话超时拦截器

SpringMVC 拦截器概述
    SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的。在SpringMVC 中定义一个Interceptor 非常简单,主要有两种方式,第一种方式是要定义的Interceptor类要实现了Spring 的HandlerInterceptor 接口,或者是这个类继承实现了HandlerInterceptor 接口的类,比如Spring 已经提供的实现了HandlerInterceptor 接口的抽象类HandlerInterceptorAdapter ;第二种方式是实现Spring的WebRequestInterceptor接口,或者是继承实现了WebRequestInterceptor的类。
1.、 要使用拦截器,第一步就必须要引入SpringMVC相关的Jar文件,同时还需要引入 aopalliance.jar文件;
2、定义拦截器类: SessionTimeOutInterceptor,具体如下:

第一步:配置web.xml
        <!-- 匹配置Session超时时间,单位分钟  -->
       < session-config >
             < session-timeout > 10 </ session-timeout >
       </ session-config >
第二步:配置Spring-mvc.xml
             <!-- 定义拦截器 -->
           < mvc:interceptor >
              <!-- 匹配的是 url 路径, 如果不配置或/**,将拦截所有的Controller -->
              < mvc:mapping path = "/**" />  
              < bean class = "com.kedacom.ies.web.interceptor.SessionTimeOutInterceptor" >  
                   <!-- 过滤拦截的url ,包括一些静态资源 -->
                   < property name = "excludedUrls" >
                         < list >
                               < value > /login </ value >
                               < value > /logout </ value >
                               < value > /loginUser </ value >
                               < value > /property/get </ value >
                               < value > /js/ </ value >
                               < value > /css/ </ value >
                               < value > /files/ </ value >
                               < value > /images/ </ value >
                               < value > /map/ </ value >
                         </ list >
                   </ property >
             </ bean >
          </ mvc:interceptor >
第三部:编写 SessionTimeOutInterceptor中的拦截方法
package com.kedacom.ies.web.interceptor;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.log4j.Logger;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.kedacom.webcommon.domain.User;
import com.kedacom.webcommon.util.session.HttpSessionManager;
/**
 * Session超时过滤器
 *
 * @author HuangHua
 * @Date 2017 - 12 - 8下午3:42:19
 */
public class SessionTimeOutInterceptor implements HandlerInterceptor {
      
       private static Logger log = Logger. getLogger (SessionTimeOutInterceptor. class );
      
       /**
       * 过滤拦截的 url
       */
       private List<String> excludedUrls ;
       /**
        * 在DispatcherServlet完全处理完请求后被调用
        * 当拦截器抛出异常时,依然会从当前拦截器往回执行所的拦截器的afterCompletion()
        */
       @Override
       public void afterCompletion(HttpServletRequest request,
                  HttpServletResponse response, Object handler, Exception exception)
                   throws Exception {
      }
       /**
       * 在业务处理器处理请求执行完成后,生成视图之前执行的动作
       */
       @Override
       public void postHandle(HttpServletRequest request, HttpServletResponse response,
                  Object handler, ModelAndView modelAndView) throws Exception {
      }
       /**
        * 在业务处理器处理请求之前被调用
        * 如果返回false 则退出本拦截器,本拦截器后面的postHandle与afterCompletion不再执行
        */
       @Override
       public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
                  Object handler) throws Exception {
            String requestUri = request.getRequestURI();
             for (String url : excludedUrls ) {
                   if (requestUri.contains(url)) {
                         return true ;
                  }
            }
            HttpSession session = request.getSession();
            User user = HttpSessionManager. getUser (session);
             if (user == null ){
                   log .info( "Pedirect to login page" );
//                System.out.println("\n-----Session会话超时,请重新登录-----\n");
                  String url = request.getContextPath() + "/login.html" ;
//                System.out.println(" url =" + url );
                  response.sendRedirect(url);
                   return false ;
            } else {
//                System.out.println("\n-----允许通过的URL:" + requestUri + "-----\n");
                   return true ;
            }
      }
       public List<String> getExcludedUrls() {
             return excludedUrls ;
      }
       public void setExcludedUrls(List<String> excludedUrls) {
             this . excludedUrls = excludedUrls;
      }
  
}

猜你喜欢

转载自blog.csdn.net/hhua5230/article/details/79923675