SpringMvc拦截器使用介绍

news2024/11/20 12:35:14

文章目录

  • 拦截器
    • 拦截器基本介绍
    • 拦截器快速入门
    • 拦截器参数

拦截器

拦截器基本介绍

拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行

作用

在指定的方法调用前后执行预先设定的代码

阻止原始方法的执行(例如权限管理)

执行流程:

在这里插入图片描述

拦截器与过滤器的区别:

归属不同:Filter属于Servlet技术,Interceptor属于SpringMVC技术

拦截内容不同:Filter对所有访问进行增强,Interceptor仅针对SpringMVC的访问进行增强

拦截器快速入门

案例需求:

制作拦截器功能类;

配置拦截器的执行位置

实现步骤如下:

创建拦截器功能类ProjectInterceptor实现HandlerInterceptor接口, 并声明为bean; 推荐在controller包下创建一个interceptor, 在该包下写拦截器功能类

@Component
public class ProjectInterceptor implements HandlerInterceptor {
    @Override
    // 原始方法执行之前执行的操作
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle");
      	// 如果return的是false表示终止原始方法执行, 以及终止原始方法执行之后的拦截器操作
        return true;
    }

    @Override
    // 原始方法执行之后执行的操作
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle");
    }

    @Override
    // 原始方法执行完成之后, 且在postHandle方法执行之后执行的操作
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion");
    }
}

定义配置类,继承WebMvcConfigurationSupport,实现addInterceptor方法(注意:扫描加载配置)

@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {
    @Autowired
    private ProjectInterceptor projectInterceptor;

    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        // 设置访问哪个路径时使用哪个拦截器
        registry.addInterceptor(projectInterceptor).addPathPatterns("/books");
    }
}

SpringMvcConfig中加载SpringMvcSupport配置类

@Configuration
@ComponentScan({"com.chenyq.controller", "com.chenyq.config"})
@EnableWebMvc
public class SpringMvcConfig {
}

目前拦截器可以拦截所有访问/users的请求, 但是/users/100这样路径的请求并不会拦截; 添加拦截器并设定拦截的访问路径,路径可以通过可变参数设置多个, 我们可以在配置一个路径用于拦截类似于/users/100这样的路径

@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {
    @Autowired
    private ProjectInterceptor projectInterceptor;

    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        // 设置访问哪个路径时使用哪个拦截器
        registry.addInterceptor(projectInterceptor).addPathPatterns("/users", "/users/*");
    }
}

配置类简化开发: 让SpringMvcConfig核心配置类, 实现标准接口WebMvcConfigurer简化开发(注意:侵入式较强)

@Configuration
@ComponentScan("com.chenyq.controller")
@EnableWebMvc
public class SpringMvcConfig implements WebMvcConfigurer {
    @Autowired
    private ProjectInterceptor projectInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(projectInterceptor).addPathPatterns("/users", "/users/*");
    }
}

拦截器执行流程:

在这里插入图片描述

拦截器参数

前置处理:

参数:

  • request:请求对象
  • response:响应对象
  • handler: 描述的是对原始方法的封装,本质上是一个方法对象,对反射技术中的Method对象进行了再包装, 获取handler对象就可以操作原始执行的方法

返回值:

  • 返回值为false,被拦截的处理器将不执行
@Override
// 原始方法执行之前执行的操作
public boolean preHandle(HttpServletRequest request,
                         HttpServletResponse response,
                         Object handler) throws Exception {
    System.out.println("preHandle");
    return true;
}

后置处理:

参数

  • request和response参数与前置处理一样
  • modelAndView: 如果处理器执行完成具有返回结果,可以读取到对应数据与页面信息,并进行调整
@Override
// 原始方法执行之后执行的操作
public void postHandle(HttpServletRequest request, 
                       HttpServletResponse response, 
                       Object handler, ModelAndView modelAndView) throws Exception {
    System.out.println("postHandle");
}

完成后处理:

参数:

  • request和response参数与前置处理一样
  • ex: 如果处理器执行过程中出现异常对象,可以针对异常情况进行单独处理
@Override
// 原始方法执行完成之后, 且在postHandle方法执行之后执行的操作
public void afterCompletion(HttpServletRequest request,
                            HttpServletResponse response,
                            Object handler, Exception ex) throws Exception {
    System.out.println("afterCompletion");
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/484397.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解MySQL索引

目录 1.什么是索引 2.使用索引的优缺点 3.索引的数据结构 4.索引的分类 5.索引的操作 6.复合索引的数据结构 1.什么是索引 当我们想在一本书里面找到具体的章节的时候,最快的办法是去查看这本书的目录,索引就类似于数据库中存储的数据的目录&…

LeetCode-1033. 移动石子直到连续

题目链接 LeetCode-1033. 移动石子直到连续 题目描述 题解 题解一(Java) 作者:仲景 这题目挺难懂的,得画画图才能更好的理解 这也是LeetCode的尿性,习惯了,非得整这种别人看不懂的鸟语 你可以这样理解&a…

总结839

每日必复习:(微习惯,5分钟) 回顾了第二讲数列极限,明天加大回顾力度,复习才是王道。 学习内容: 暴力英语:艾玛沃特森在联合关于女性平等的演讲,背诵并默写了前四段&…

windows/linux文件传输

windows系统下文件传输-FTP python安装pyftpdlib模块 pip install pyftpdlib 这里可能会出现报错,自己看着更换源解决 然后运行python,在2121端口监听 python -m pyftpdlib 然后我们可以使用windows命令行进行操作,自己可以去看下相关文…

Linux配置静态IP地址

个人PC访问虚拟机的基本原理: PC借助虚拟网卡访问虚拟机(VMWare)的网关,再通过网关连接虚拟机。因此,PC的虚拟网卡,虚拟机的网关,虚拟机,三者的IP地址应在同一网段。(默…

【方法】如何在PPT文稿中插入Word表格?

我们在做PPT文稿的时候,经常需要导入其他文档的内容,比如想在PPT里插入Word表格,要怎么操作呢?方法很容易,来看看下面的具体操作步骤吧。 首先,打开PPT后,点击菜单【插入】列表中的【对象】。 …

nodejs+vue+java农村信息化服务平台

用户的登录模块:用户登录本系统,对个人的信息等进行查询,操作可使用的功能。 用户注册模块:游客用户可以进行用户注册,系统会反馈是否注册成功。 添加管理员模块:向本系统中添加更多的管理人员,…

【Linux】基础IO_文件描述符

环境:centos7.6,腾讯云服务器Linux文章都放在了专栏:【Linux】欢迎支持订阅 相关文章推荐: 【Linux】冯.诺依曼体系结构与操作系统 【C/进阶】如何对文件进行读写(含二进制)操作? 【Linux】基…

【机器学习】第四节:监督学习算法对比评估

作者🕵️‍♂️:让机器理解语言か 专栏🎇:机器学习sklearn 描述🎨:本专栏主要分享博主学习机器学习的笔记和一些心得体会。 寄语💓:🐾没有白走的路,每一步都算…

C语言:指针【进阶】习题练习及分析讲解

目录 一维数组关于strlen函数和sizeof()的练习整型数组字符数组指针 二维数组笔试题 前言: 前面我们刚刚学完了C语言:指针详解【进阶】的知识,这部分的知识还是要重在理解加实践,今天我这里就分享一些有关C语言指针方面的练习供大…

优雅编程,从空格、空行、缩进和注释开始

很多初学者的代码其实都不够“漂亮”,那是因为没有养成好的编码习惯。本篇博客以C语言为例,总结一些好习惯。其实,很多习惯都是肌肉记忆,举个例子:请你写一个程序,输入2个整数并输出它们的和。有些朋友可能…

使用eclipse创建一个图书管理系统(1)-----搭建架构

目录 思维导图: 图书管理系统的创建: 第一步:搭建框架-------使用者 第二步:搭建框架------被使用者 第三步:操作方法 第四步:main函数 思维导图: 前言: 昨天学了一下使用Java…

演出剧院门票售票预约小程序开发制作功能介绍

基于微信小程序的票务预约小程序,广泛适用于演出主办方、剧院、艺术中心、活动中心售票、景区门票售票、儿童游乐园售票、会务签到、展会售票签到、教育培训报名预约、健身预约功能。 多场景售票支持: 售票软件支持多种场景的售票,支持选座、…

python3+Scrapy:爬虫框架问题合集 【参考转载大佬文章 + 自己解决方法】

1、发送请求403报错排查 参考链接链接: 使用scrapy做爬虫遇到的一些坑:爬虫使用scrapy爬取网页返回403错误大全以及解决方案 参考链接链接: 使用scrapy做爬虫遇到的一些坑:网站常用的反爬虫策略,如何机智的躲过反爬虫Crawled (403) 参考链接…

javaEE 初阶 — Cookie 与 Session

文章目录 Cookie 的四个问题Cookie 的典型应用Cookie 与 Session 的区别代码示例体现两者的关联关系1. 设计思路2. 编写前端登录页面3 编写 LoginServlet 处理登录请求3.1 服务器是如何组织会话的 4. 编写 IndexServlet 生成主页4.1 抓包观察交互过程 Cookie 的四个问题 1、Coo…

Doris(25):Doris的函数—Bitmap函数

1 BITMAP_AND(BITMAP lhs, BITMAP rhs) 计算两个输入bitmap的交集,返回新的bitmap. select bitmap_count(bitmap_and(to_bitmap(1), to_bitmap(2))) cnt; select bitmap_count(bitmap_and(to_bitmap(1), to_bitmap(1))) cnt; 2 BITMAP_CONTAINS(BITMAP bitmap, BIGINT input…

VGAM | tobit模型

专注系列化、高质量的R语言教程 推文索引 | 联系小编 | 付费合集 本篇来介绍tobit模型,使用的工具包是VGAM。 library(VGAM) 目录如下: 1 Tobit分布2 tobit模型3 运行模型 例1例2例34 其他 1 Tobit分布 tobit模型主要应用于因变量存在删失的情况。以正态…

交换机-Exchanges

交换机 Exchanges 概念 RabbitMQ 消息传递模型的核心思想是: 生产者生产的消息从不会直接发送到队列。实际上,通常生产者甚至都不知道这些消息传递传递到了哪些队列中。相反,生产者只能将消息发送到交换机(exchange),交换机工作的内容非常简…

Threejs进阶之十:让模型移动到鼠标点击的指定位置

上一节中我们实现了物体沿指定轨迹移动的动画效果,这一节我们来实现让模型移动到鼠标点击的制定位置的动画效果。 先看下实现后的最终效果 要实现上面的动画效果,我们需要通过以下步骤来实现 第一步,监听鼠标事件 我们需要监听鼠标的点击事…

2 ROS2话题通讯基础(2)

ROS2话题通讯基础 2.5 自定义话题通讯2.5.1 自定义话题通讯的一般流程2.5.2 创建自定义话题消息简单例子2.5.3 快速创建C/C和Python自定义话题通讯的Student.msg 2.6 使用C/C实现自定义话题通讯2.6.1 创建C/C自定义话题发布方功能包并编写节点文件2.6.2 配置C/C自定义话题发布方…