gpt4 book ai didi

go - 如何在gin-gonic/gin中间件中实现高效的IP白名单

转载 作者:数据小太阳 更新时间:2023-10-29 03:32:45 28 4
gpt4 key购买 nike

我有一个应用程序需要限制为少数 IP。如果请求 IP 不是来自允许列表,我可以编写一个中间件并返回,但是我希望这个过程尽可能高效。 IE。我想尽早断开连接。我可以断开连接的最早阶段是什么,最好是使用 HTTP 响应。我无法控制主机防火墙或边界防火墙来过滤流量,而且,即使我控制了防火墙,我也无法提供 HTTP 响应。

此外,如果我能在 gin 中获得 HTTP 请求的生命周期的描述,我会更愿意。

最佳答案

按照 Lansana 的描述添加一个中间件。

尽可能早地在链中声明它很重要。

r := gin.New()

whitelist := make(map[string]bool)
whitelist["127.0.0.1"] = true

r.Use(middleware.IPWhiteList(whitelist))

我会这样写中间件,如果你不在白名单中,返回一个适当的错误,在下面的代码片段中我返回一个 JSON 错误。

package middleware

import (
"log"
"net/http"

"github.com/gin-gonic/gin"
)

func IPWhiteList(whitelist map[string]bool) gin.HandlerFunc {
return func(c *gin.Context) {
if !whitelist[c.ClientIP()] {
c.AbortWithStatusJSON(http.StatusForbidden, gin.H{
"status": http.StatusForbidden,
"message": "Permission denied",
})
return
}
}
}

关于go - 如何在gin-gonic/gin中间件中实现高效的IP白名单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49616076/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com