From 5b4fb6802ac8458578e2d94958a80982ae2ad437 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Sat, 25 Jun 2022 23:37:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=BB=91=E7=99=BD=E5=90=8D?= =?UTF-8?q?=E5=8D=95=E9=AA=8C=E8=AF=81=E7=9A=84=E4=B8=AD=E9=97=B4=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- define/middleare.go | 24 ++++++++++++++++ middleware/init_request.go | 1 + middleware/ip_validate.go | 59 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 define/middleare.go create mode 100644 middleware/ip_validate.go 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() + } +}