SpringBoot之HandlerInterceptor拦截器的使用

news2025/1/17 1:40:55

😀前言
本篇博文是关于拦截器-HandlerInterceptor的使用,希望你能够喜欢

🏠个人主页:晨犀主页
🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力😉😉
💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
如果文章有什么需要改进的地方还请大佬不吝赐教 先在此感谢啦😊

文章目录

  • 拦截器-HandlerInterceptor
    • 基本介绍
      • 基本步骤:
    • 拦截器应用实例
      • 需求:
      • 代码实现
    • 注意事项和细节
      • URI 和URL 的区别
        • 举例说明:
    • 😄总结

拦截器-HandlerInterceptor

基本介绍

在Spring Boot 项目中, 拦截器是开发中常用手段,要来做登陆验证、性能检查、日志记录等。

基本步骤:

√ 编写一个拦截器实现HandlerInterceptor 接口
√ 拦截器注册到配置类中(实现WebMvcConfigurer 的addInterceptors)
√ 指定拦截规则

拦截器应用实例

需求:

使用拦截器防止用户非法登录, 如图- 使用拦截器就不需要在每个方法验证了
浏览器输入: http://localhost:8080/manage.html , 如果用户没有登录,则返回登录界面.

image-20230813210700183

代码实现

  1. 创建com/my/usersys/interceptor/LoginInterceptor.javapackage com.
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {

	// 目标方法执行前被调用.
    @Override
    public boolean preHandle(HttpServletRequest request, 
                             HttpServletResponse response, Object handler) throws Exception {
        //为了让小伙伴看到访问的URI
        String requestURI = request.getRequestURI();
        String requestURL = request.getRequestURL().toString();
        log.info("preHandle拦截到的请求的URI={}", requestURI);
        log.info("preHandle拦截到的请求的URL={}", requestURL);

        //进行登录的校验
        HttpSession session = request.getSession();
        Object loginAdmin = session.getAttribute("loginAdmin");
        if (null != loginAdmin) {//说明该用户已经成功登录
            //放行
            return true;
        }
        //拦截, 重新返回到登录页面
        request.setAttribute("msg", "你没有登录/请登录~~");
        request.getRequestDispatcher("/").forward(request, response);
        return false;
    }
	//目标方法执行完成以后调用
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, 
                           Object handler, ModelAndView modelAndView) throws Exception {
        log.info("postHandle执行了...");
    }
	//页面渲染以后调用
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, 
                                Object handler, Exception ex) throws Exception {
        log.info("afterCompletion执行了...");
    }
}
  1. 创建com/my/usersys/config/WebConfig.java
@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {

        //注册自定义拦截器LoginInterceptor
        registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns("/**") //拦截所有的请求
                .excludePathPatterns("/","/login","/images/**");
        //指定要放行的,后面可以根据业务需求,来添加放行的请求路径
    }
}
  1. 修改com/my/usersys/controller/AdminController.java , 去掉session 验证用户是否登录代码, 并完成测试, 注意看页面和后台日志.
//处理用户的请求到 manage.html
    @GetMapping("/manage.html")
    public String mainPage(Model model, HttpSession session) {
         log.info("进入mainPage()");
        //可以这里集合-模拟用户数据, 放入到request域中,并显示
        ArrayList<User> users = new ArrayList<>();
        users.add(new User(1, "关羽~", "666666", 20, "gy@sohu.com"));
        users.add(new User(2, "张飞", "666666", 30, "zf@sohu.com"));
        users.add(new User(3, "赵云", "666666", 22, "zy@sohu.com"));
        users.add(new User(4, "马超", "666666", 28, "mc@sohu.com"));
        users.add(new User(5, "黄忠", "666666", 50, "hz@sohu.com"));

        //放入model的数据默认到request域
        model.addAttribute("users", users);

        return "manage"; //这里才是我们的视图解析到 /templates/manage.html
    }

image-20230813211243822

image-20230813211311424

注意事项和细节

URI 和URL 的区别

URI = Universal Resource Identifier
URL = Universal Resource Locator
Identifier:标识符,Locator:定位器从字面上来看, URI 可以唯一标识一个资源, URL 可以提供找到该资源的路径

举例说明:

String requestURI = request.getRequestURI();
String requestURL = request.getRequestURL().toString();

注册拦截器, 依然可以使用如下方式

public class WebConfig /*implements WebMvcConfigurer*/ {
	//将我们的拦截器, 注入到容器中
    //@Override
    //public void addInterceptors(InterceptorRegistry registry) {
    //
    //    //注册自定义拦截器LoginInterceptor
    //    registry.addInterceptor(new LoginInterceptor())
    //            .addPathPatterns("/**") //拦截所有的请求
    //            .excludePathPatterns("/","/login","/images/**");
    //指定要放行的,后面可以根据业务需求,来添加放行的请求路径
    //}

    @Bean
    public WebMvcConfigurer webMvcConfigurer() {

        return new WebMvcConfigurer() {
            @Override
            public void addInterceptors(InterceptorRegistry registry) {
                System.out.println("addInterceptors~~~");
                //注册拦截器
                registry.addInterceptor(new LoginInterceptor())
                        .addPathPatterns("/**")
                        .excludePathPatterns("/","/login","/images/**");
            }
        };
    }
}

😄总结

  1. URI 可以唯一标识一个资源, URL 可以提供找到该资源的路径。
  2. 拦截所有的请求时要注意哪些资源需要放行,防止无法请求。
  3. 拦截器注册到配置类中(实现WebMvcConfigurer 的addInterceptors),一定要指定拦截规则。

😁热门专栏推荐

Thymeleaf快速入门及其注意事项

Spring Initailizr–快速入门–SpringBoot的选择

带你了解SpringBoot支持的复杂参数–自定义对象参数-自动封装

Rest 优雅的url请求处理风格及注意事项

文章到这里就结束了,如果有什么疑问的地方请指出,诸大佬们一起来评论区一起讨论😁
希望能和诸大佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

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

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

相关文章

对发卡涡(Hairpin vortex)初步认识

对发卡涡&#xff08;Hairpin vortex&#xff09;初步认识 Hairpin vortex是一种在流体动力学中常见的涡旋结构。它通常形成在流体中的强烈剪切区域&#xff0c;例如在河流、管道或飞机翼等流体流动中。Hairpin vortex的形状类似于一个发夹弯曲的形状&#xff0c;因此得名&…

(7)(7.1) 使用航点和事件规划任务

文章目录 前言 7.1.1 设置Home位置 7.1.2 视频&#xff1a;制作并保存多路点任务 7.1.3 视频&#xff1a;加载已保存的多航点任务 7.1.4 使用说明 7.1.5 提示 7.1.6 自动网格 7.1.7 任务指令 7.1.8 任务结束 7.1.9 任务重置 7.1.10 MIS_OPTIONS 7.1.11 任务再出发 …

【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeuS(DTU格式)数据集

【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeuS(DTU格式)数据集 提示:最近开始在【三维重建】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。 文章目录 【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeuS(DTU格式)数据集前言下载…

浅析3D打印技术

目录 1.3D打印的概念 2.3D打印的发展过程 3.3D打印的应用领域 4.3D打印带来的技术变革 1.3D打印的概念 3D打印是一种制造技术&#xff0c;它使用逐层堆叠材料的方式来创建物体。与传统的加工方法相比&#xff0c;3D打印具有很多优势。 在3D打印中&#xff0c;一种叫做CAD&am…

深度解读智能化编码的技术架构与实践案例

向更智能、更兼容演进。 陈高星&#xff5c;演讲者 大家好&#xff0c;我是阿里云视频云的陈高星&#xff0c;今天和大家分享的主题是“多”维演进&#xff1a;智能化编码架构的研究与实践。 本次分享分为四部分&#xff1a;首先是视频编码与增强方向的业界趋势&#xff0c;其…

Apple Watch 9和Apple Watch 8功能差异对比:预期升级浅析

每年的这个时候,我们都会想知道Apple Watch Series 9和Apple Watch Series 8之间会有什么不同。随着苹果下一代智能手表预计将于9月上市,我们渴望了解该公司即将进行的升级。 Apple Watch Series 8是目前最好的智能手表,但根据Apple Watch Series 9的改进,它可能会成为我们…

为什么C语言全局变量初始化元素必须是常量,而局部变量可以不是常量

前言 &#xff08;1&#xff09;今天看到一个有意思的问题&#xff0c;在交流群中&#xff0c;一位网友问&#xff0c;全局变量为什么不能给变量。会出现initializer element is not constant报错&#xff0c;代码如下 #include <stdio.h>int a 1; int b a1; //这里会报…

Zabbix-6.4.4 邮箱告警SMS告警配置

目录 ​------------------------- # 邮箱告警 ---------------------------------- 1.安装mailx与postfix软件包 2.修改mailx配置文件 3. 创建文件夹 4. 编写mail-send.sh脚本 5. 将该脚本赋予执行权限 6. 进入web界面进行设置—> Alerts —> Media Types 7. 添…

C++11并发与多线程笔记(3)线程传参详解,detach()大坑,成员函数做线程函数

C11并发与多线程笔记&#xff08;3&#xff09;线程传参详解&#xff0c;detach 大坑&#xff0c;成员函数做线程函数 1、传递临时对象作为线程参数1.1 要避免的陷阱11.2 要避免的陷阱21.3 总结 2、临时对象作为线程参数2.1 线程id概念2.2 临时对象构造时机抓捕 3、传递类对象…

数据结构算法--3快速排序

快速排序比冒泡排序&#xff0c;选择排序&#xff0c;插入排序速度都快 快速排序思路&#xff1a; ^取一个元素P&#xff0c;(第一个元素)&#xff0c;使元素P归位。 ^列表被P分成了两部分&#xff0c;左边都比P小&#xff0c;右边都比P大。 ^递归完成排序。 过程: 把5拿出…

FreeRTOS中断优先级测试

目录 资源配置 测试方案 易出 bug 测试代码 资源配置 1、定时器3中断优先级为3 2、定时器4中断优先级为4 3、FreeRTOS中断配置 OS系统管理不高于中断优先级4的中断。 #ifdef __NVIC_PRIO_BITS /* __NVIC_PRIO_BITS 已经在stm32f1xx.h里面定义为4 */#define configPRIO_B…

poetry add scipy || Poetry安装scipy失败

这里出现了一个使用poetry安装scipy失败的报错 poetry add scipy 大致意思是说&#xff0c;找不到需要的库和目前的python在版本上的交集&#xff0c;所以安装不了。 这可能与自己在poetry环境中已经安装的库有关。 但不管怎么说&#xff0c;我的这个3.10版本会装不了都是一…

【STM32RT-Thread零基础入门】 4. 线程介绍(理论)

文章目录 前言一、线程的概念二、线程的调度三、上下文切换四、线程的重要属性1. 线程栈2. 线程的状态3. 线程优先级4. 线程时间片5. 线程的入口函数 五、RT-Thread命令查看系统线程信息总结 前言 前文中的最后一个任务发现&#xff0c;一个main()函数很难同时实现按键功能和闪…

基于浏览器的插件sider,使用chatgpt3.5生成的连接Redis的代码

一.安装 首先在浏览器安装Sider插件&#xff0c;具体安装步骤https://www.423xz.com/gaoxiao/3949.html 收费情况&#xff1a;每天有几次的免费使用chatgpt3.5的次数&#xff0c;chatgpt4需要付费了。 二.使用步骤&#xff1a; 安装后使用&#xff0c;具体步骤&#xff1a;…

20 张图,透析HTTPs五大知识点

本文详细介绍了 HTTPS 相较于 HTTP 更安全的原因&#xff0c;包括对称加密、非对称加密、完整性摘要、数字证书以及 SSL/TLS 握手等内容&#xff0c;图文并茂、理论与实战结合、建议收藏&#xff01; 1. 不安全的 HTTP 近些年来&#xff0c;越来越多的网站使用 HTTPS 协议进行…

OpenCV-Python中的图像处理-霍夫变换

OpenCV-Python中的图像处理-霍夫变换 霍夫变换霍夫直线变换霍夫圆环变换 霍夫变换 霍夫(Hough)变换在检测各种形状的技术中非常流行&#xff0c;如果要检测的形状可以用数学表达式描述&#xff0c;就可以是使用霍夫变换检测它。即使要检测的形状存在一点破坏或者扭曲也是可以使…

【产品设计】用设计讲好故事 – JOOX 2020听歌年榜总结

JOOX是腾讯面向东南亚市场战略性的音乐App&#xff0c;作为一个国家化品牌&#xff0c;它面临着一些困难&#xff0c;但同时它通过创意的方式将自己的产品价值观传递给用户。我们在设计产品中&#xff0c;做好一个设计项目&#xff0c;就好比讲一个故事&#xff0c;但这只是一种…

基于php驾校驾驶理论考试模拟系统

驾校驾驶理论考试模拟系统&#xff0c;是基于php编程语言&#xff0c;mysql数据库进行开发&#xff0c;本系统分为用户和管理员两个角色&#xff0c;其中用户可以注册登陆系统&#xff0c;查看考试规则&#xff0c;进行驾照考试&#xff0c;查看考试得分&#xff0c;考试错题&a…

docker安装国产开源数据库tidb 单机版

docker pull pingcap/tidb 创建目录&#xff0c;然后安装tidb mkdir -p /data/tidb/data 创建容器 docker run --name tidb -d -v /data/tidb/data:/tmp/tidb --privilegedtrue -p 4000:4000 -p 10080:10080 pingcap/tidb:latest TiDB 简介 | PingCAP 文档中心

将您的 Ins 形象提升到新的水平

在当今这个社交媒体盛行的时代&#xff0c;Ins已成为人们展示个性、吸引关注的重要平台。你是否曾经想过&#xff0c;如果能够在同一个 Ins账户上展示不同的形象&#xff0c;让你的粉丝感受到更多的惊喜和乐趣呢&#xff1f;多账户登录功能正是满足这一需求的利器&#xff0c;它…