当前位置: 首页 > 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
在这里插入图片描述
验证成功才能访问
在这里插入图片描述
在这里插入图片描述

相关文章:

  • 初识——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
  • 陕西省市监局通报5批次不合格食品,涉添加剂超标、微生物污染等问题
  • 《大风杀》导演张琪:为了不算计观众,拍了部不讨好的警匪片
  • 青海省交通运输厅副厅长田明有接受审查调查
  • 商务部新闻发言人就出口管制管控名单答记者问
  • 秦洪看盘|指标股发力,A股渐有突破态势
  • 菲律宾中期选举初步结果出炉,杜特尔特家族多人赢得地方选举