SpringBoot——整合拦截器(Interceptor)

目录

 拦截器(Interceptor)

项目总结

新建一个SpringBoot项目​编辑

MyInterceptor自定义拦截器

InterceptorConfig配置类

InterceptorController控制器

 SpringbootInterceptorApplication启动类


 

在开发SpringBoot项目时,开发人员经常需要对HTTP请求进行拦截和处理,以实现诸如身份验证、授权、日志记录等功能。为了实现这些功能,Spring Boot提供了过滤器和拦截器这两个工具。此外,开发人员还需要使用SpringBoot中的监听器监听SpringBoot项目中的特定事件,以实现统计网站访问量、记录用户访问路径、系统启动时加载初始化信息等功能。

 拦截器(Interceptor)

  • SpringBoot的拦截器用于拦截用户请求并做相应的处理。例如验证用户是否登录、日志记录、权限管理等。
  • 拦截器可以在控制器类中的方法被执行前和被执行后对请求做一些处理
  • 实现拦截器,主要是实现HandlerInterceptor接口,该接口有三大方法:
    • preHandle():方法执行前,处理请求时
    • postHandle():方法执行后,处理请求时
    • afterCompletion():请求结束后
  • 过滤器与拦截器的主要区别在于触发的时机不同

项目总结

  • 该项目的目的在于拦截请求,让请求进入控制器类的一个方法,并读取请求中的value参数的值,在控制器类处理完请求后,再次拦截请求,查看请求中value参数值是否发生变化 
  • 前后发生了变化,证明拦截器成功拦截了请求,并指使它干了某些事

新建一个SpringBoot项目

项目结构:

MyInterceptor自定义拦截器

package com.study.springboot_interceptor.intercepter;import org.springframework.lang.Nullable;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** 自定义拦截器*/
public class MyInterceptor implements HandlerInterceptor {/*** preHandle()方法会在控制器类中的方法被执行之前,对请求进行处理时被执行* @param request   请求对象* @param response  响应对象* @param handler   请求的处理程序对象*/public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler){if(handler instanceof HandlerMethod){//如果是HandlerMethod对象HandlerMethod method=(HandlerMethod) handler;//通过handler对象的类型知晓请求将进入控制器类中的哪个方法System.out.println("(1)请求访问控制器类中的方法是:"+method.getMethod().getName()+"()");Object value=request.getAttribute("value");//读取请求的某个属性,默认为nullSystem.out.println("   执行方法前:value="+value);return true;}return false;}//postHandle()方法会在控制器类中的方法被执行之后,对请求进行处理时被执行public void postHandle(HttpServletRequest request, HttpServletResponse response,Object handler,@Nullable ModelAndView modelAndView){Object value=request.getAttribute("value");//执行完请求,再读取此属性System.out.println("(2)执行方法后:value="+value);}//afterCompletion()方法会在整个请求结束之后被执行public void afterCompletion(HttpServletRequest request, HttpServletResponse response,Object handler,@Nullable  Exception ex){request.removeAttribute("value");//执行完请求,再读取此属性System.out.println("(3)整个请求都执行完毕,在此做一些资源释放工作");}
}

InterceptorConfig配置类

package com.study.springboot_interceptor.config;import com.study.springboot_interceptor.intercepter.MyInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class InterceptorConfig implements WebMvcConfigurer {public void addInterceptors(InterceptorRegistry registry){InterceptorRegistration registration = registry.addInterceptor(new MyInterceptor());registration.addPathPatterns("/**");//拦截所有路径,/**表示匹配多层地址}
}

InterceptorController控制器

package com.study.springboot_interceptor.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;
@RestController
public class InterceptorController {@RequestMapping("/index")public String index(){return "欢迎访问XXX网站";}@RequestMapping("/login")public String login(HttpServletRequest request){request.setAttribute("value","登录前在此保存了一些属性值");//向请求中插入一个属性值return "请先登录";}
}

 SpringbootInterceptorApplication启动类

package com.study.springboot_interceptor;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class SpringbootInterceptorApplication {public static void main(String[] args) {SpringApplication.run(SpringbootInterceptorApplication.class, args);}}
  • 启动项目,依次访问网址
    • http://localhost:8080/index
    • http://localhost:8080/login 
  • 访问第二个网址时,请求被login()方法处理后,value参数就有了新值

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

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

相关文章

SAP-FICO总账科目案例

1、资产科目 2、负债科目

计网期末复习指南(三):数据链路层(CRC冗余校验码计算、PPP协议、CSMA/CD协议、交换机的自学习能力、VLAN)

前言:本系列文章旨在通过TCP/IP协议簇自下而上的梳理大致的知识点,从计算机网络体系结构出发到应用层,每一个协议层通过一篇文章进行总结,本系列正在持续更新中... 计网期末复习指南(一):计算…

iOS 通过PacketLogger 抓包蓝牙数据包

当使用iOS平台调试蓝牙外设时,需要抓取蓝牙数据包,那么如何获取iOS端设备与蓝牙设备之间通信的蓝牙数据包呢? 一、资料准备 1、苹果手机 2、Xcode开发工具 3、Apple开发者账户 二、环境搭建 2.1、手机环境搭建 手机浏览器访问地址&…

Meta的开源力作:Lexical框架,富文本的未来

引言 Lexical 是一个由 Facebook(现在称为 Meta)开源的可扩展 JavaScript Web 文本编辑器框架。 这个框架特别强调了三个核心特性:可靠性、可访问性以及高性能。 旨在为开发者创造最优的开发体验。 以下是 Lexical 框架的几个关键特点和能…

使用conda环境安装pythonocc-core

conda环境安装pythonocc库 基本环境 操作系统:Ubuntu 22.04 conda 23.11.0 安装pythonocc-core conda create --name pyocc python3.10 conda activate pyocc conda install -c conda-forge pythonocc-core7.8.1也可参考下面的官方地址 pythonocc-core 官方git地址 conda官…

苏宁电商数据揭秘:掌握苏宁API接口,一键解锁无限商机

苏宁API接口是一套开放的、基于HTTP协议的接口,它允许开发者通过编程方式访问苏宁平台上的商品、订单、用户等信息。这些接口支持多种数据格式,如JSON和XML,并提供了完善的错误处理和权限控制机制。 要使用苏宁API接口,首先需要在…

wireshark 二次开发

一、 Windows 准备 1、源代码下载 Git:https://github.com/wireshark/wireshark 2、 准备Visual C 要编译wireshark,开发电脑上应该安装了Visual Studio并包括了Visual C,请至少安装Visual Studio 2010以减少不必要的麻烦。 visual studio …

媳妇面试了一家公司,期望月薪20K,对方没多问就答应了,只要求3天内到岗,可我总觉得哪里不对劲。

“20k!明天就来上班吧!” 听到这句话,你会不会两眼放光,激动得差点跳起来? 朋友媳妇小丽,最近就经历了这样一场“梦幻面试”。然而,事情的发展却远没有想象中那么美好…… “这公司也太好了吧…

新闻发稿:14种新闻媒体推广中的成功案例-华媒舍

新闻媒体推广是企业宣传与推广的重要手段之一。通过合理选择和运用新闻媒体,企业可以有效地提升品牌知名度和影响力,吸引更多的目标受众。本文将介绍14种新闻媒体推广中的成功案例,通过这些案例的分享,希望能为企业在新闻媒体推广…

AWS EC2服务器开启root密码,SSH登录

1) EC2 Instance Connect连接,更改root密码 sudo passwd root 2)接着切换到切换到 root 身份,编辑 SSH 配置文件 $ sudo -i$ vi /etc/ssh/sshd_configPasswordAuthentication no,把 no 改成 yes #PermitRootLogin prohibit-passw…

论文降重技巧:AI工具如何助力论文原创性提升?

论文降重一直是困扰各界毕业生的“拦路虎”,还不容易熬过修改的苦,又要迎来降重的痛。 其实想要给论文降重达标,我有一些独家秘诀。话不多说直接上干货! 1、同义词改写(针对整段整句重复) 这是最靠谱也是…

动态规划1:1137. 第 N 个泰波那契数

动态规划解题步骤: 1.确定状态表示:dp[i]是什么 2.确定状态转移方程:dp[i]等于什么 3.初始化:确保状态转移方程不越界 4.确定填表顺序:根据状态转移方程即可确定填表顺序 5.确定返回值 题目链接:1137…

Python管理PVE(Proxmox VE)云平台--节点资源统计2

一、前言 承接上文:Python管理PVE(Proxmox VE)云平台–节点资源统计 将cpu、内存、磁盘融入到一个脚本中,新增总资源占用计算模块,更直观的看出剩余未分配资源。 二、步骤 1.代码 # -*- coding: utf-8 -*- import o…

城市低空经济“链接力”指数报告(2024)

来源:城市进化论&火石创造 近期历史回顾:2024年NoETL开启自动化数据管理新时代白皮书.pdf 创新引领用户“换新生活”-从AWE2024看家电及消费电子行业发展趋势报告(精简版).pdf 2024智能网联汽车“车路云一体化”规模建设与应用…

3DMAX样条线轮廓修改器插件SplineOffset安装使用方法

3DMAX样条线轮廓修改器插件安装使用教程 3DMAX样条线轮廓插件SplineOffset是3dMax的一个修改器,它可以创建多个样条线克隆,并可以选择增量增加或减少偏移、平移和旋转。在许多方面,它类似于3dMax的内置阵列工具与样条线偏移功能相结合。 3DM…

Go 编程风格指南 - 最佳实践

Go 编程风格指南 - 最佳实践 原文:https://google.github.io/styleguide/go 概述 | 风格指南 | 风格决策 | 最佳实践 注意: 本文是 Google Go 风格 系列文档的一部分。本文档是 规范性(normative) 但不是强制规范(canonical),并且从属于Goo…

进入mysql报错:bash:/bin/mysql:没有那个文件或目录

问题分析: 有可能把/bin下面的mysql文件删除 解决方案: 卸载已安装MySQL,重新安装一遍 卸载步骤: 在CentOS系统中卸载MySQL可以通过以下步骤进行: 1、停止MySQL服务: sudo systemctl stop mysqld 2…

【GD32F303红枫派使用手册】第七节 TIMER-蜂鸣器PWM

7.1 实验内容 通过本实验主要学习以下内容: PWM输出功能实现; 定时器基本原理; 蜂鸣器驱动原理; 7.2 实验原理 7.2.1 蜂鸣器驱动原理 蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用…

2024年信息素养大赛图形化编程小低组复赛模拟真题

2024年全国青少年信息素养大赛复赛为六道编程题,分值为10分*215分*225分*2,难度依次递增,按步骤评分,据Scratch实验室预估,初赛80%的晋级率,初赛近20万人,意味着有15万多进入复赛,7月…

bootstrapblazor小白笔记

使用了bootstrapblazor,采用.net8.0,server模式,所有的问题都是基于以上条件所遇到的 1、登录过后需要在每个页面都使用认证吗 是不需要的,每个页面都写attribute [Authorize]没有问题,但是页面很多的话一个一个的写很…