diff --git a/define/middleare.go b/define/middleare.go new file mode 100644 index 0000000..bd042a2 --- /dev/null +++ b/define/middleare.go @@ -0,0 +1,24 @@ +// Package define ... +// +// Description : define ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 2022-06-25 23:25 +package define + +import "github.com/gin-gonic/gin" + +// IsBlackIP 是否是黑名单IP +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 23:25 2022/6/25 +type IsBlackIP func(ctx *gin.Context, clientIP string) bool + +// IsWhiteIP 是否白名单IP +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 23:27 2022/6/25 +type IsWhiteIP func(ctx *gin.Context, clientIP string) bool diff --git a/middleware/init_request.go b/middleware/init_request.go index ea41fbe..27d94d0 100644 --- a/middleware/init_request.go +++ b/middleware/init_request.go @@ -30,6 +30,7 @@ func InitRequest() gin.HandlerFunc { ctx.Set(define.TraceIDField, traceID) ctx.Set(define.RequestIDField, requestID) ctx.Set(define.StartRequestTimeField, time.Now().UnixNano()) + ctx.Next() } } diff --git a/middleware/ip_validate.go b/middleware/ip_validate.go new file mode 100644 index 0000000..0f970ea --- /dev/null +++ b/middleware/ip_validate.go @@ -0,0 +1,59 @@ +// Package middleware ... +// +// Description : middleware ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 2022-06-25 23:24 +package middleware + +import ( + "git.zhangdeman.cn/zhangdeman/gin/define" + "git.zhangdeman.cn/zhangdeman/gin/response" + "git.zhangdeman.cn/zhangdeman/util" + "github.com/gin-gonic/gin" +) + +// ValidateBlackIPMiddleware 验证黑名单IP的中间件 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 23:24 2022/6/25 +func ValidateBlackIPMiddleware(code interface{}, httpCode int, validateFunc define.IsBlackIP) gin.HandlerFunc { + return func(ctx *gin.Context) { + if nil == validateFunc { + // 不验证黑名单 + ctx.Next() + return + } + if validateFunc(ctx, util.IP.GetRemoteIP(ctx.Request)) { + // 命中黑名单 + response.Send(ctx, code, httpCode, nil) + ctx.Abort() + return + } + ctx.Next() + } +} + +// ValidateWhiteIPMiddleware 是否白名单IP +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 23:33 2022/6/25 +func ValidateWhiteIPMiddleware(code interface{}, httpCode int, validateFunc define.IsWhiteIP) gin.HandlerFunc { + return func(ctx *gin.Context) { + if nil == validateFunc { + // 不验证白名单 + ctx.Next() + return + } + if !validateFunc(ctx, util.IP.GetRemoteIP(ctx.Request)) { + // 非名单 + response.Send(ctx, code, httpCode, nil) + ctx.Abort() + return + } + ctx.Next() + } +}