springMVC拦截器使用

新建一个类,实现

HandlerInterceptor 接口

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyInterceptor implements HandlerInterceptor {
    /*preHandler方法会[早于]控制器中的方法先执行
    如果该方法返回false,则不执行控制器的方法(相当于之前没有执行放行代码)
    返回true,则继续执行控制器的方法
    * */
    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest,
                             HttpServletResponse httpServletResponse,
                             Object o) throws Exception {
        System.out.println("MyInterceptor的preHandler方法被执行了");
        return true;
    }
    /*
    * postHandle方法[晚于]控制器方法执行-1
    * 控制器方法执行完,在准备跳转页面之前,先执行该方法,此时ModelAndView中存储着控制器要跳转的页面路径和
    * 存储作用域数据*/
    @Override
    public void postHandle(HttpServletRequest httpServletRequest,
                           HttpServletResponse httpServletResponse,
                           Object o, ModelAndView modelAndView) throws Exception {
        System.out.println("MyInterceptor的postHandle方法被执行了");
    }
    /*afterCompletion
    * 方法[晚于]控制器方法执行-2
    * 等页面跳转渲染了才会执行*/
    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest,
                                HttpServletResponse httpServletResponse,
                                Object o, Exception e) throws Exception {
        System.out.println("MyInterceptor的afterCompletion方法执行了");
    }
}

在mvc.xml配置控制器

<!--拦截器相关配置-->
    <mvc:interceptors>
        <mvc:interceptor>
            <!--指定要拦截器的请求路径
            /* 只能拦截器http://ip地址:8081/项目名/test3.do请求
            /** 拦截所有请求
            -->
            <mvc:mapping path="/**"/>
            <!--exclude(排除)排除一些不拦截的请求路径
             <mvc:mapping path=""/>
            -->
           <!--拦截器的全类名-->
            <bean class="com.test.MyInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

 

 

 

posted @ 2020-09-07 15:02  奶牛花花  阅读(926)  评论(0编辑  收藏  举报