拦截器

拦截器

1、概述

Interceptor

一个SpringMVC中的组件

作用:拦截目标Handler,为Handler提供权限过滤、释放资源、改变视图等等作用

2、自定义拦截器实现步骤

2.1 编写一个类【MyInterceptor1】,实现HandlerInterceptor,重写三个方法

package com.qf.java2007.web.interceptors;

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

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

/**
 * @author ghy
 * @version 1.0
 */
public class MyInterceptor1 implements HandlerInterceptor {

    /**
     * 在目标Handler执行之前执行,一般用于权限拦截
     * @param request
     * @param response
     * @param handler
     * @return 是否放行, true : 放行【可以执行后续操作】, false : 不放行【直接中断操作】
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("在目标Handler执行之前执行.........11111");
        return true;
    }

    /**
     * 在目标Handler执行之后、渲染视图之前执行,可以改变响应结果
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("在目标Handler执行之后、渲染视图之前执行.........1111");
        //modelAndView.setViewName("redirect:/index.jsp");
    }

    /**
     * 在渲染视图之后执行,可以释放资源
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("在渲染视图之后执行.........1111");
    }
}

2.2 springmvc配置文件中配置拦截器

  • 配置拦截规则
<!-- 配置拦截器 -->
<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <bean class="com.qf.java2007.web.interceptors.MyInterceptor1"></bean>
    </mvc:interceptor>
</mvc:interceptors>

2.3 测试

测试效果:http://localost/test1

3、拦截器链

  • 由多个拦截器组成

3.1 执行顺序

  1. 先执行拦截一的preHandler方法
    1. 如果返回flase,直接中断操作
    2. 如果返回true,执行拦截器二的preHandler方法
      1. 如果拦截二返回false,再执行拦截器一afterCompletion
      2. 如果拦截二返回true,执行Handler,再执行拦截二的postHandle,再执行拦截一的postHandle,再执行拦截二的afterCompletion方法,最后执行拦截器一afterCompletion
posted @ 2021-07-21 13:52  牛奶配苦瓜  阅读(37)  评论(0编辑  收藏  举报