gin框架使用系列之六——自定义中间件
2023-12-27 20:57:53
- 系列目录
一、gin中间件概述
??gin中将很多需要拓展的功能都归纳到中间件中,比如说上篇我们用到的国际化的转换器,就是一个中间件。在大多数情况下,中间件可以理解为一个拦截器,gin中将中间件组成一个链,在调用的过程中依次执行中间件,就可以实现拦截的目的。
??gin中的中间件实现其实很简单,其实就是一个func(*Context)的函数类型,并在使用的时候在router.use()中注入即可。尤其是因为有routeGroup功能,gin还可以支持给不同的group添加不同的中间件
??在中间件中,调用c.Next()方法可以让直行链继续,调用c.Abort()方法阻断链的继续执行
??注意:在gin的中间件中,直接return不能阻断链条的执行,必须调用c.Abort()方法才行
二、自定义token校验中间件示例
我们自定一个token校验的中间件,来掩饰中间件的使用方法
自定义中间件的核心代码如下:
func checkToken(c *gin.Context) {
var token string
// 找到token数据
for key, value := range c.Request.Header {
if strings.ToLower(key) == "x-token" {
token = value[0]
}
}
// 校验token
if token != "hong" {
c.JSON(http.StatusBadRequest, gin.H{
"msg": "token错误",
})
c.Abort()
}
c.Next()
}
整体示例代码如下:
package main
import (
"github.com/gin-gonic/gin"
"net/http"
"strings"
)
func checkToken(c *gin.Context) {
var token string
// 找到token数据
for key, value := range c.Request.Header {
if strings.ToLower(key) == "x-token" {
token = value[0]
}
}
// 校验token
if token != "hong" {
c.JSON(http.StatusBadRequest, gin.H{
"msg": "token错误",
})
c.Abort()
}
c.Next()
}
func main() {
router := gin.Default()
// 添加token校验的中间件
router.Use(checkToken)
router.GET("/ping", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "pong",
})
})
router.Run() // listen and serve on 0.0.0.0:8080
}
运行程序,添加错误token的访问结果
添加正确token的访问结果
后记
??个人总结,欢迎转载、评论、批评指正
文章来源:https://blog.csdn.net/u012559967/article/details/135251088
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!