diff --git a/gin/middleware/ip.go b/gin/middleware/ip.go new file mode 100644 index 0000000..fe6012e --- /dev/null +++ b/gin/middleware/ip.go @@ -0,0 +1,51 @@ +// Package middleware ... +// +// Description : ip黑白名单的限制 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 2021-07-29 5:52 下午 +package middleware + +import ( + "net/http" + + "github.com/gin-gonic/gin" +) + +// IPValidate IP和白名单的验证, 注意 : 既存在于白名单, 也存在于黑名单, 则认为是黑名单 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 5:53 下午 2021/3/9 +func IPValidate(whiteIPList []string, blackIPList []string, responseData map[string]interface{}) gin.HandlerFunc { + return func(ctx *gin.Context) { + realClientIP := ctx.ClientIP() + if nil != blackIPList && len(blackIPList) > 0 { + for _, blackIP := range blackIPList { + if realClientIP == blackIP { + // 黑名单IP + ctx.AbortWithStatusJSON(http.StatusOK, responseData) + return + } + } + } + + if nil != whiteIPList && len(whiteIPList) > 0 { + isWhiteIP := false + for _, whiteIP := range whiteIPList { + if realClientIP == whiteIP { + isWhiteIP = true + break + } + } + if !isWhiteIP { + // 配置了白名单,但是非白名单IP + ctx.AbortWithStatusJSON(http.StatusOK, responseData) + return + } + } + + ctx.Next() + } +}