Spring MVC会话超时拦截器

本文介绍如何在SpringMVC中配置并使用拦截器(Interceptor),以实现Session超时检查等功能。通过示例代码展示了拦截器的定义、配置及排除特定URL的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
      }
  
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值