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

验证成功才能访问

相关推荐
Cisyam^4 小时前
Go环境搭建实战:告别Java环境配置的复杂
java·开发语言·golang
fured6 小时前
[调试][实现][原理]用Golang实现建议断点调试器
开发语言·后端·golang
NPE~7 小时前
[手写系列]Go手写db — — 第二版
开发语言·数据库·golang·教程·db·手写系列
好学且牛逼的马7 小时前
golang 10指针
开发语言·c++·golang
切糕师学AI11 小时前
.Net Core Web 架构(管道机制)的底层实现
中间件·系统架构·kestrel·mvc·.netcore·路由·请求管道
切糕师学AI12 小时前
浏览器访问 ASP.NET Core wwwroot 目录下静态资源的底层实现
后端·中间件·kestrel·管道·.net core web
水墨熊猫15 小时前
【FIX】go运行报错“missing go.sum entry for module providing package”解决方案
golang·gin
孤雪心殇1 天前
如何安全,高效,优雅的提升linux的glibc版本
linux·后端·golang·glibc
techdashen1 天前
性能比拼: .NET (C#) vs. Fiber (Go)
golang·c#·.net
xiao-xiang2 天前
zookeeper-保姆级配置说明
分布式·zookeeper·云原生·中间件·zk