如何使用中间件
发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,这篇文章主要讲解了"如何使用中间件",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何使用中间件"吧!中间件使用场景:auth权限认证跨域其他需要在业务
千家信息网最后更新 2025年11月09日如何使用中间件
image.png
这篇文章主要讲解了"如何使用中间件",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何使用中间件"吧!
中间件
使用场景:
auth权限认证 跨域 其他需要在业务处理之前处理的事务
我们接着上一期的工程继续
查看一下目录
➜ go-gin-test tree -L 3
.
├── go.mod
├── go.sum
├── hello
├── mian.go
└── routerex
└── router.go 在routerex目录下新建mid目录 在mid目录下新建mid.go文件
首先我们定义一个中间件。它的作用是在请求到达服务后,但是还未进行业务处理时,需要验证请求是否合法
编辑mid.go
package mid
import (
"github.com/gin-gonic/gin"
)
func midAuth(c *gin.Context) {
//获取请求的ip地址
ip := c.ClientIP()
//如果请求地址来源不正确,那么阻止这个请求继续
if ip != "baidu.com" {
println("ip 地址不正确")c.Abort()return
}
// 处理请求
c.Next()
}
编辑router.go
package routerex
import (
"example.com/m/v2/routerex/mid"
"github.com/gin-gonic/gin"
)
func InitRouter(g *gin.Engine) {
g1 := g.Group("g1")
//中间件
g1.Use(mid.MidAuth)
g1.GET("/hello1", func(c *gin.Context) {
c.JSON(200, gin.H{
"msg": "Hello g1",
})
})
g2 := g.Group("g2")
g2.GET("/hello2", func(c *gin.Context) {
c.JSON(200, gin.H{
"msg": "Hello g2",
})
})
}
执行go build -o hello来编译为可执行文件
➜ go-gin-test go build -o hello
➜ go-gin-test ls
go.mod go.sum hello mian.go 执行./hello让我们的服务跑起来
打开浏览器访问http://localhost:8080/g1/hello1

[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
- using env: export GIN_MODE=release
- using code: gin.SetMode(gin.ReleaseMode)
[GIN-debug] GET /g1/hello1 --> example.com/m/v2/routerex.InitRouter.func1 (4 handlers)
[GIN-debug] GET /g2/hello2 --> example.com/m/v2/routerex.InitRouter.func2 (3 handlers)
[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080
ip 地址不正确
[GIN] 2021/04/06 - 17:00:38 | 200 | 61.658µs | ::1 | GET "/g1/hello1" 可以看到我们的浏览器上没有任何输出
但是在后台日志上,我们看到了我们在代码中打印的ip 地址不正确
通过这个思路,我们可以实现很多业务或者场景的需求。
下面这个代码就是通用的跨域中间件
func midCors(c *gin.Context) {
c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin"))
c.Header("Access-Control-Allow-Headers", "*")
c.Header("Access-Control-Allow-Methods", "*")
c.Header("Access-Control-Allow-Credentials", "true")
//放行所有OPTIONS方法
if c.Request.Method == "OPTIONS" {
c.AbortWithStatus(http.StatusNoContent)
}
// 处理请求
c.Next()
} POST和GET获取值的方式
Parameters in path (url路径参数)
name := c.Param("name")Querystring parameters
//这个写法具有默认值
firstname := c.DefaultQuery("firstname", "Guest") Multipart/Urlencoded Form(表单)
//无默认值
message := c.PostForm("message")
//有默认值
nick := c.DefaultPostForm("nick", "anonymous") Map as querystring or postform parameters(Map或者表单)
ids := c.QueryMap("ids")
names := c.PostFormMap("names") file(文件类型)
form, _ := c.MultipartForm()
files := form.File["upload[]"] JSON
//结构体
j := J{}
c.BindJSON(j) 当然除了上述常用的方式之外,gin还提供的更加丰富的获取参数的方式。
感谢各位的阅读,以上就是"如何使用中间件"的内容了,经过本文的学习后,相信大家对如何使用中间件这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
中间件
地址
目录
处理
文件
方式
学习
代码
内容
参数
场景
就是
思路
是在
浏览器
表单
服务
浏览
验证
合法
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
成都网络安全监理工程师
数据通信与网络技术ICT
数据库年份
软件开发论坛排名
服务器区块卸载
算法与软件开发有什么区别
sql查3个月数据库
松下电器软件开发公司怎么样
网络安全漏洞如何修补
江苏网络技术开发市面价
税务信息网络安全ppt模板
计算机网络技术tcp
珠海横琴网络技术有限公司
数据库怎么实现排序
sql数据库备份
软件开发属于理科还是文科
香港科大网络安全专业
软件开发公司战略分析
免费使用的windows服务器
陕西小坡岛互联网科技有限公司
网络连接不上显示服务器错误
网络安全督察员
中学网络安全小品剧本
云南应用软件开发有哪些
人大金仓数据库测试软件
元氏县国家网络安全周
服务器设备管理系统
前端服务器 管理工具
自制小视频软件开发
中国电信网络技术面试题目