如何使用中间件
发表于:2024-11-18 作者:千家信息网编辑
千家信息网最后更新 2024年11月18日,这篇文章主要讲解了"如何使用中间件",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何使用中间件"吧!中间件使用场景:auth权限认证跨域其他需要在业务
千家信息网最后更新 2024年11月18日如何使用中间件
这篇文章主要讲解了"如何使用中间件",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何使用中间件"吧!
中间件
使用场景:
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安全错误
数据库的锁怎样保障安全
浪潮服务器怎么进pe
MC服务器管理员等级
软件开发工资很高么
微软网络安全业务
针林数据库
数据库关系的题
软件开发系统安全问题
广东c语言软件开发价位
信息技术中的网络技术
简述数据库设计的原理和流程
吉林软件开发服务五星服务
rcms服务器
邹平包装软件开发服务
济南武夷山软件开发
网络安全知识学生网登录
中国重要报纸全文数据库人民日报
帝国数据库
成都网络安全产业怎么样
网络安全 2022年4月
安排部署网络安全宣传周活动方案
薛晓宇 网络安全
快思维审计软件无法连接到服务器
数据库职工部门关系模式图
网络安全的主动攻击
国家数据库网站在哪里
百宝云数据库怎么调用接入
职中计算机网络技术今后的发展图
计算机网络技术和物流管理
redis数据库是nosql吗
才米公社服务器已经关掉了吗