增加黑白名单验证的中间件

This commit is contained in:
白茶清欢 2022-06-25 23:37:10 +08:00
parent 754a8762ee
commit 5b4fb6802a
3 changed files with 84 additions and 0 deletions

24
define/middleare.go Normal file
View File

@ -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

View File

@ -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()
}
}

59
middleware/ip_validate.go Normal file
View File

@ -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()
}
}