go-中间件的使用

中间件介绍

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

1.定义全局中间件

go 复制代码
package main

import (
	"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.定义局部中间件

go 复制代码
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")
}

中间件的应用

go 复制代码
package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
)

// 4.定义全局中间件
func Auth() gin.HandlerFunc {
	return func(c *gin.Context) {
		//  1. 获取token
		token := 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

验证成功才能访问

相关推荐
2501_9419820512 小时前
深度对比:Java、Go、Python 实现企微外部群推送,哪个效率更高?
java·golang·企业微信
参.商.18 小时前
【Day 27】121.买卖股票的最佳时机 122.买卖股票的最佳时机II
leetcode·golang
牛奔18 小时前
如何理解 Go 的调度模型,以及 G / M / P 各自的职责
开发语言·后端·golang
爆米花byh19 小时前
在RockyLinux9环境的Kafka4.1.1单机版安装(无ZK依赖)
中间件·kafka
牛奔20 小时前
Go 是如何做抢占式调度的?
开发语言·后端·golang
爆米花byh20 小时前
在RockyLinux9环境的Storm2.8.3单机版安装
linux·中间件·storm
PD我是你的真爱粉21 小时前
FastAPI中间件与路由
中间件·fastapi
清云随笔1 天前
Golang基础
golang
会算数的⑨1 天前
Kafka知识点问题驱动式的回顾与复习——(一)
分布式·后端·中间件·kafka
牛奔1 天前
Go 如何避免频繁抢占?
开发语言·后端·golang