package main import ( "fmt" "github.com/gin-gonic/gin" "net/http" ) func IPAuthMiddleware() gin.HandlerFunc { return func(c *gin.Context) { ipList := []string{ "127.0.0.2", } flag := false clientIP := c.ClientIP() for _, ip := range ipList { if ip == clientIP { flag = true break } } if !flag { c.String(http.StatusUnauthorized, "%s not in ip list", clientIP) c.Abort() } } } func main() { r := gin.Default() r.Use(IPAuthMiddleware()) r.GET("whitelist_middleware_gin", func(c *gin.Context) { c.String(200, c.ClientIP()) }) err := r.Run() if err != nil { fmt.Println(err) } }
1、ip数组初始化:
ipList := []string{ "127.0.0.2", }
2、获取客户端ip
c.ClientIP()
3、自定义中间件:
3.1 定义中间件方法 func IPAuthMiddleware() gin.HandlerFunc { return func(c *gin.Context) { } } 3.2 使用中间件 r.Use(IPAuthMiddleware())
4、中间件校验不通过直接退出
c.Abort() // 不终止退出的话,会继续调用接口,输出接口内容,与中间件检验拦截目的不符