i_a*_*ess 1 middleware go go-gin
我有一个应用程序,需要将其限制为少数几个 IP。我可以编写一个中间件,如果请求 IP 不在允许列表中,则返回,但是我希望这个过程尽可能高效。即我想尽早断开连接。我最早可以在什么阶段断开连接,最好是通过 HTTP 响应。我无法控制主机防火墙或边界防火墙来过滤流量,并且即使我控制了防火墙,我也无法提供 HTTP 响应。
另外,我希望能够获得 gin 中 HTTP 请求生命周期的描述。
按照 Lansana 的描述添加中间件。
尽早在链中声明它很重要。
r := gin.New()
whitelist := make(map[string]bool)
whitelist["127.0.0.1"] = true
r.Use(middleware.IPWhiteList(whitelist))
Run Code Online (Sandbox Code Playgroud)
我会像这样编写中间件,如果你不在白名单中,则返回一个适当的错误,在下面的代码片段中我将返回一个 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
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5277 次 |
| 最近记录: |