ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

拦截器

2021-07-21 14:04:01  阅读:133  来源: 互联网

标签:Exception 拦截器 param Handler 拦截 执行


拦截器

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

标签:Exception,拦截器,param,Handler,拦截,执行
来源: https://www.cnblogs.com/qxlzzj/p/15039131.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有