zoukankan      html  css  js  c++  java
  • SpringMVC拦截器详解

    Springmvc的拦截器是一种类似于servlet过滤器的类,用于对控制器的预处理和后处理 来看源码:

    package org.springframework.web.servlet; public interface HandlerInterceptor {
    
    boolean preHandle( HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;
    
    void postHandle( HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception;
    
    void afterCompletion( HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception; }

    方法preHandle:用于对controller预处理,如判断是否登录,session过期检验,返回值为布尔型,为true就放行,为false就就拦截,需要用Reponse来进行响应;

    方法postHandle:后处理回调方法,在controller方法执行之后,视图渲染之前执行,可以对模型数据和视图进行处理,ModelandView对象可以为null;

    方法afterCompletion:请求处理完毕回调方法,在视图渲染完成之后执行,可以进行性能检测,输出消耗时间,类似于try-catch-finally中的finally,可以进行资源清理;

    我们来编写一个拦截器来进行session过期检验:

    public class sessionInterceptor implements HandlerInterceptor {
    
    @Override
    
    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception {
    
      System.out.println("执行了afterCompletion()方法");
    
    }
    
    @Override
    
    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception {
    
    System.out.println("执行了postHandle()方法");
    
    }
    
    /** * 返回值表示,是否需要将当前请求拦截下来 * 第三个参数,是被拦截请求的目标对象 */
    
    @Override
    
    public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
    
      System.out.println("执行了preHandle()方法");
    
      HttpSession session = arg0.getSession();
    
      //在进入web应用是将USer值传入session中,为null表示session超时,跳转到登录界面
    
      if (session.getAttribute("USER")!=null) {
    
        return true;
    
      }
    
      System.out.println("session超时");
    
      arg0.getRequestDispatcher("/WEB-INF/views/login.jsp").forward(arg0, arg1);
    
      return false;
    
      }
    
    }

    在SpringMVC.xml中配置拦截器:

    <!-- 注册拦截器 -->
        <mvc:interceptors>
            <!-- session过期检查拦截器 -->
            <mvc:interceptor>
                <!-- 需要拦截的页面 -->
                <mvc:mapping path="/**"/><!-- 1、 /**      表示所有文件夹及里面的子文件夹
                                              2、 /*        表示所有文件夹,不含子文件夹
                                              3、 /        表示web项目的根目录 -->
                <!-- 不需要拦截的页面 -->
                <mvc:exclude-mapping path="/showLogin"/>
                
                <!-- 静态资源,不需要拦截 -->
                <mvc:exclude-mapping path="/static/**"/>
    
                
                <bean class="cn.hbmy.wxfw.intercept.sessionInterceptor"></bean>
            </mvc:interceptor>
        
        </mvc:interceptors>

    mapping表示需要拦截的页面请求,exclude-mapping表示不需要拦截的页面,入登录界面和静态资源,最后,将拦截器类注入到框架中,这样对整个web应用进行检测,检测session是否过期

  • 相关阅读:
    Python算术运算符
    Python数据类型转换
    Linux下Tomcat启动设置debug模式启动
    FastJson之JsonObject, JsonString, JavaBean,List快速转换
    Linux 之 ./configure --prefix 命令
    JS中Ajax的同步和异步
    MySql 中 case when then else end 的用法
    Linux中CentOS6.5 64位 系统下安装docker步骤
    Linux常用命令 查找文件
    微信小程序中事件
  • 原文地址:https://www.cnblogs.com/lm-book/p/9368222.html
Copyright © 2011-2022 走看看