当前位置: 首页 > news >正文

go-中间件的使用

中间件介绍

  • Gin框架允许开发者在处理请求的过程中加入用户自己的钩子(Hook)函数
  • 这个钩子函数就是中间件,中间件适合处理一些公共的业务逻辑
  • 比如登录认证,权限校验,数据分页,记录日志,耗时统计

1.定义全局中间件

package mainimport ("fmt""github.com/gin-gonic/gin"
)// 4.定义全局中间件
func MiddleWare() gin.HandlerFunc {return func(c *gin.Context) {fmt.Println("我是一个全局中间件")}
}func main() {// 1.实力化引擎r := gin.Default()//  全局使用中间件r.Use(MiddleWare())//  2. 配置路由r.GET("/hello", func(c *gin.Context) {fmt.Println("执行hello")c.JSON(200, gin.H{"msg": "执行成功"})})//  3. 启动服务fmt.Println("服务启动成功:http://127.0.0.1:8080/hello")r.Run(":8080")
}

2.定义局部中间件

func main() {// 1.实力化引擎r := gin.Default()//  2. 配置路由r.GET("/hello", func(c *gin.Context) {fmt.Println("执行hello")c.JSON(200, gin.H{"msg": "执行成功"})})// 局部使用中间件r.GET("/hook", MiddleWare(), func(c *gin.Context) {fmt.Println("执行hello")c.JSON(200, gin.H{"msg": "执行hook成功"})})//  3. 启动服务fmt.Println("服务启动成功:http://127.0.0.1:8080/hello")r.Run(":8080")
}

中间件的应用

package mainimport ("fmt""github.com/gin-gonic/gin"
)// 4.定义全局中间件
func Auth() gin.HandlerFunc {return func(c *gin.Context) {//  1. 获取tokentoken := c.Request.Header.Get("token")fmt.Println(token)if token != "123456" {c.String(403, "token验证失败")c.Abort() // 终止请求return}c.Next()}
}func main() {// 1.实力化引擎r := gin.Default()//  2. 配置路由r.GET("/index", func(c *gin.Context) {c.JSON(200, gin.H{"msg": "index无需登录可以访问"})})r.GET("/home", Auth(), func(c *gin.Context) {c.JSON(200, gin.H{"msg": "home需登录验证才能访问"})})//  3. 启动服务fmt.Println("服务启动成功:http://127.0.0.1:8080/hello")r.Run(":8080")
}

token验证失败直接反馈403
在这里插入图片描述
验证成功才能访问
在这里插入图片描述
在这里插入图片描述

http://www.dtcms.com/a/193789.html

相关文章:

  • 初识——QT
  • 第八节第三部分:认识枚举、枚举的作用和应用场景
  • React学习———CSS Modules(样式模块化)
  • CSS:三大特性
  • 黑马点评面试前复习
  • 事件驱动架构:从传统服务到实时响应的IT新风潮
  • MySQL 高可用
  • 光谱相机的空间分辨率和时间分辨率
  • 聊一聊接口测试的一致性如何处理?
  • h5,原生html,echarts关系网实现
  • 金融问答系统:如何用大语言模型打造高精度合规的金融知识引擎
  • 数据库故障排查指南:从入门到精通
  • 卡顿检测与 Choreographer 原理
  • 20250516使用TF卡将NanoPi NEO core开发板出厂的Ubuntu core22.04.3系统降级到Ubuntu core16.04.2
  • 视频抽帧并保存blob
  • 用户现场不支持路由映射,如何快速将安防监控EasyCVR视频汇聚平台映射到公网?
  • 分布式锁: Redisson红锁(RedLock)原理与实现细节
  • TC8:SOMEIP_ETS_029-030
  • R语言如何解决导出pdf中文不显示的问题
  • 【C++】 —— 笔试刷题day_30
  • 现在环保方面有什么新的技术动态
  • Python - 爬虫;Scrapy框架之items,Pipeline管道持久化存储(二)
  • 云计算与大数据进阶 | 26、解锁云架构核心:深度解析可扩展数据库的5大策略与挑战(上)
  • 主流数据库运维故障排查卡片式速查表与视觉图谱
  • 25-05-16计算机网络学习笔记Day1
  • SQLMesh 增量模型从入门到精通:5步实现高效数据处理
  • 基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL
  • OceanBase 的系统变量、配置项和用户变量有何差异
  • 捌拾伍- 量子傅里叶变换 (3)
  • 数据结构进阶:AVL树与红黑树