springboot 拦截器

news2024/11/17 18:26:08

定义

拦截器类似于javaweb中filter 功能
注意: 只能拦截器controller相关的请求

作用

举一个例子,例如我们在Controller中都有一段业务逻辑,这样我们就可以都统一放在拦截器中
在这里插入图片描述
因此拦截器的作用就是将controller中共有代码放入到拦截器中执行,减少controller中代码冗余

特性

1).拦截器只能拦截controller相关请求
2).拦截器可以中断请求轨迹
3).请求之前如果该请求配置了拦截器,请求会先经过拦截器,拦截器放心之后执行请求的controller,controller执行完成之后会回到拦截器继续执行拦截器中的代码

拦截器开发

a.类 implement HandlerInterceptor 接口 引入默认实现

preHandler : 预先处理方法: 最先执行方法 返回值布尔类型 true 放行请求 false 中断controller 中内容

postHandler过程中处理: controller返回之后回到postHandler这个方法执行,执行完成这个方法开始响应浏览器

afterCompletion 最后完成: 当响应结束之后会执行拦截器中这个方法内容

b.配置拦截器

springboot 提供了springmvc配置类: WebMvcConfigurer
基本格式如下:
类 implement WebMvcConfigurer{
//覆盖配置拦截器方法
1.使用哪个拦截器 2.拦截器拦截请求 3.排除那些请求
}

具体实例

在项目文件中新建interceptors文件夹,新建拦截器类


public class MyInterceptor1 implements HandlerInterceptor {

    private static final Logger log = LoggerFactory.getLogger(MyInterceptor1.class);

    //pre handler 最先执行
    //参数3: handler 当前请求请求的控制器方法对象  DemoController#demo
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.debug("handler: {} ", handler);
        log.debug("===========1=========");
//        response.sendRedirect(request.getContextPath()+"/403.jsp");
        return true;//放行 false 中断
    }

    //参数3: handler 当前请求请求的控制器方法对象  DemoController#demo
    //参数4: modelAndView 模型和视图  当前请求访问方法的modelandview对象
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        log.debug("===========2=========");
        //log.debug("view: {}",modelAndView.getViewName());
    }

    //参数3: handler 当前请求请求的控制器方法对象  DemoController#demo
    //参数4: exception 如果控制器出现异常时异常对象
    //这个方法: finally{}代码块  总是执行  无论请求正确,出现异常
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        log.debug("===========3=========");
    }
}

在项目文件中配置WebMvcConfigure

@Configuration
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor1()) //指定拦截器
                .addPathPatterns("/**")//拦截所有
                .excludePathPatterns("/file/**");//排除那些路径
    }
}

项目执行结果

在这里插入图片描述

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

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

相关文章

【算法与数据结构】496、503、LeetCode下一个更大元素I II

文章目录 一、496、下一个更大元素 I二、503、下一个更大元素II三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、496、下一个更大元素 I 思路分析:本题思路和【算法与数据结构】739、LeetCode每日温度类似…

【VTKExamples::PolyData】第二十四期 InterpolateTerrain

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例InterpolateTerrain,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 1. InterpolateTerrain 输出: Interp…

精灵图,字体图标,CSS3三角

精灵图 1.1为什么需要精灵图 一个网页中往往会应用很多小的背景图像作为修饰,当网页中的图像过多时,服务器就会频繁的接受和发送请求图片,造成服务器请求压力过大,这将大大降低页面的加载速度。 因此,为了有效地减少…

深入Java容器:概览、设计模式与源码分析

深入Java容器:概览、设计模式与源码分析 Java 容器一、概览Collection1. Set2. List3. Queue Map 二、容器中的设计模式迭代器模式适配器模式 三、源码分析ArrayList1. 概览2. 扩容3. 删除元素4. 序列化5. Fail-Fast Vector1. 同步2. 扩容3. 与 ArrayList 的比较4. …

Java与MySQL的精准结合:打造高效审批流程

1流程思路分析 审批流程🐱‍💻 1.串行流程 当前节点审批完成后,下一次节点才能进行操作,例如经理通过之后,总监才能审批; 2.并行流程 一个审批节点需要多人联审。一般有两种方式:会签、或签…

Python中的嵌套字典访问与操作详解

前言 在Python编程中,嵌套字典是一种常见的数据结构,它可以以层次结构的方式组织和存储数据。嵌套字典通常包含字典内嵌套在其他字典中,创建了一种多层级的数据结构。本文将详细介绍如何在Python中访问和操作嵌套字典,包括访问、…

视频无损放大修复工具Topaz Video AI 新手入门教程

想要自学Topaz Video AI ?Topaz Video AI 如何使用?这里给大家带来了视频无损放大修复工具Topaz Video AI 新手入门教程,快来看看吧! 下载:Topaz Video AI for mac 导入您的文件 有两种方法可以将文件导入 Topaz Vid…

C++重新入门-C++变量作用域

目录 1.C变量定义 2.C作用域 3.局部变量 4.全局变量 5.块作用域变量 6.初始化局部变量和全局变量 1.C变量定义 一般来说有三个地方可以定义变量: 在函数或一个代码块内部声明的变量,称为局部变量。 在函数参数的定义中声明的变量,称为…

【博云2023】乘龙一跃腾云海,侧目抬手摘星河

癸卯渐远,甲辰渐至,预示着被汗水浇灌的种子,必将顶开冻土,迎接阳光。 每逢春节,当亲友彼此问候,博云人总能自豪地说,我们认真地、努力地奋斗,让我们能自信地踏上新的征程。 我们的…

架构(十二)动态Excel

一、引言 作者最近的平台项目需要生成excel,excel的导入导出是常用的功能,但是作者想做成动态的,不要固定模板,那就看看怎么实现。 二、后端 先捋一下原理,前后端的交互看起来是制定好的接口,其实根本上是…

安全的接口访问策略

渗透测试 一、Token与签名 一般客户端和服务端的设计过程中,大部分分为有状态和无状态接口。 一般用户登录状态下,判断用户是否有权限或者能否请求接口,都是根据用户登录成功后,服务端授予的token进行控制的。 但并不是说有了tok…

4核8G服务器配置性能怎么样?12M带宽配置服务器能干什么?

腾讯云轻量4核8G12M轻量应用服务器支持多少人同时在线?通用型-4核8G-180G-2000G,2000GB月流量,系统盘为180GB SSD盘,12M公网带宽,下载速度峰值为1536KB/s,即1.5M/秒,假设网站内页平均大小为60KB…

16.1 Spring框架_SpringIoC容器与Bean管理(❤❤❤❤)

16.1 Spring框架_SpringIoC容器与Bean管理 1. Spring IOC1.1 IoC控制反转 1. Spring IOC 1.1 IoC控制反转 需要自己查找3种苹果的特色,从而选择符合自己的需求 告诉水果店老板自己的口味,由老板推荐哪种苹果,省去自己查询水果特点 在java中,各种水果就是各种对象,买水果就是创…

问题:2、计算机网络的目标是实现________。 #媒体#知识分享

问题:2、计算机网络的目标是实现________。 A.数据处理 B.信息传输与数据处理 C.资源共享与信息传输 D.文献查询 参考答案如图所示

【用pycharm安装第三方库时出现错误】【‘pip‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。】

目录 一、问题描述 二、解决过程 1、pip的版本不是最新版本导致安装不了第三方库 2、pip最新版本安装出错 3、pip 不是内部或外部命令,也不是可运行的程序或批处理文件” 4、 ERROR: Could not find a version that satisfies the requirement PIL (from versi…

政安晨:示例演绎机器学习中(深度学习)神经网络的数学基础——快速理解核心概念(二){两篇文章讲清楚}

这一篇与上一篇是兄弟篇,意在通过两篇文章讲清楚深度学习中神经网络的数学基础,第一次看到这篇文章的小伙伴可以从上一篇文章看起(包括搭建环境等等都在上一篇),上一篇链接如下: 政安晨:示例演…

Flink基础篇|001_Flink是什么

📫 作者简介:「六月暴雪飞梨花」,专注于研究Java,就职于科技型公司后端工程师 🏆 近期荣誉:华为云云享专家、阿里云专家博主、腾讯云优秀创作者 🔥 三连支持:欢迎 ❤️关注、&#x…

Linux系统调试课:Linux错误码介绍

文章目录 一、错误码二、错误码返回案例三、使用 goto 语句沉淀、分享、成长,让自己和他人都能有所收获!😄 📢错误代码由内核或用户空间应用程序(通过errno变量)解释。错误处理在软件开发中非常重要,而不仅仅是在内核开发中。幸运的是,内核提供的几种错误,几乎涵盖了可…

InternLM大模型实战-1.书生浦语大模型全链路开源体系

文章目录 前言笔记正文大模型成为热门关键词书生浦语开源历程从模型到应用书生浦语全链条开源开放体系数据预训练微调评测部署部署智能体LagentAgentLego 总结 前言 本系列文章是参与书生浦语全链路开源体系学习的笔记文章。B站视频教程地址: 笔记正文 大模型成为…

【笔记】Harmony学习:下载安装 DevEco Studio 开发工具IDE

IDE 安装 从官网下载DevEco Studio 安装包后进行安装, 安装完毕后,本地环境可能要配置相关工具,可以通过下面的诊断检测一下本地环境,通过蓝色“Set it up now” 可以快速安装。 1. Node.js (for ohpm) 2. ohpm 下载op的包管理&a…