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() // 不终止退出的话,会继续调用接口,输出接口内容,与中间件检验拦截目的不符