如何使用中间件
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇文章主要讲解了"如何使用中间件",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何使用中间件"吧!中间件使用场景:auth权限认证跨域其他需要在业务
千家信息网最后更新 2025年01月23日如何使用中间件
这篇文章主要讲解了"如何使用中间件",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何使用中间件"吧!
中间件
使用场景:
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安全错误
数据库的锁怎样保障安全
中国平安互联网科技事业部
网络安全趣味知识ppt
甘肃服务器硬盘销售
嵌入式软件开发公司
手机浏览服务器
湖北公安网络安全训练平台
软件开发预付款
服务器怎样验证控件
东师数据库
监控管理服务器图
国内数据库同步厂商
服务器管理你没有权限
医院网络安全检查组织开展情况
网络安全走向趋势
湖北电商软件开发如何收费
霸州市网络安全攻防演练
网络技术图片图片
删除数据库数据自增长
全国小学生网络安全知识
c获取服务器ip地址
数据库的主关键字可以是图像吗
mysql数据库启动命令
衡水服务器电信机房
数据库技术与应用英文书
王者荣耀服务器错误进不去
按键精灵与数据库
网络安全小知识小游戏
偏远乡镇都有五年服务器吗
广州峰哥网络技术有限公司
历史数据库维护