有没有什么好的方法可以用 Echo 按 IP 地址过滤请求?
Is there a good way to filter requests by IP address with Echo?
我正在使用 Echo HTTP 框架开发 API 服务器。我想通过 IP 地址过滤一些请求。
以后我可以更好地管理这些 URL。
这是我的代码:
func filterIP(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
fmt.Println("c.RealIP()=", c.RealIP())
fmt.Println("c.Path()", c.Path())
if isFilterIp(c.RealIP(), c.Path()) {
return echo.NewHTTPError(http.StatusUnauthorized,
fmt.Sprintf("IP address %s not allowed", c.RealIP()))
}
return next(c)
}
}
func main() {
e := echo.New()
filterGroup := e.Group("/filter")
filterGroup.Use(filterIP)
filterGroup.GET("/test", func(c echo.Context) error {
return c.String(http.StatusOK, "test filter")
})
noFilterGroup := e.Group("/noFilter")
noFilterGroup.GET("/test", func(c echo.Context) error {
return c.String(http.StatusOK, "test no filter")
})
e.Logger.Fatal(e.Start(":1323"))
}
而且我想在 url 级别而不是组路由中过滤 IP 地址。
例如:如果有两条路径:/filter/test01
和 /filter/test02
,我只想过滤 test01.
有什么好方法可以做到这一点吗?
你可以为此添加一个中间件:
func filterIP(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
// Block requests from localhost.
if c.RealIP() == "127.0.0.1" {
return echo.NewHTTPError(http.StatusUnauthorized,
fmt.Sprintf("IP address %s not allowed", c.RealIP()))
}
return next(c)
}
}
func main() {
e := echo.New()
e.Use(filterIP)
e.GET("/", func(c echo.Context) error {
return c.String(http.StatusOK, "Hello, World!")
})
e.Logger.Fatal(e.Start(":1323"))
}
使用 RealIP()
功能很重要,否则您可能会得到代理的 IP 地址。
我正在使用 Echo HTTP 框架开发 API 服务器。我想通过 IP 地址过滤一些请求。
以后我可以更好地管理这些 URL。
这是我的代码:
func filterIP(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
fmt.Println("c.RealIP()=", c.RealIP())
fmt.Println("c.Path()", c.Path())
if isFilterIp(c.RealIP(), c.Path()) {
return echo.NewHTTPError(http.StatusUnauthorized,
fmt.Sprintf("IP address %s not allowed", c.RealIP()))
}
return next(c)
}
}
func main() {
e := echo.New()
filterGroup := e.Group("/filter")
filterGroup.Use(filterIP)
filterGroup.GET("/test", func(c echo.Context) error {
return c.String(http.StatusOK, "test filter")
})
noFilterGroup := e.Group("/noFilter")
noFilterGroup.GET("/test", func(c echo.Context) error {
return c.String(http.StatusOK, "test no filter")
})
e.Logger.Fatal(e.Start(":1323"))
}
而且我想在 url 级别而不是组路由中过滤 IP 地址。
例如:如果有两条路径:/filter/test01
和 /filter/test02
,我只想过滤 test01.
有什么好方法可以做到这一点吗?
你可以为此添加一个中间件:
func filterIP(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
// Block requests from localhost.
if c.RealIP() == "127.0.0.1" {
return echo.NewHTTPError(http.StatusUnauthorized,
fmt.Sprintf("IP address %s not allowed", c.RealIP()))
}
return next(c)
}
}
func main() {
e := echo.New()
e.Use(filterIP)
e.GET("/", func(c echo.Context) error {
return c.String(http.StatusOK, "Hello, World!")
})
e.Logger.Fatal(e.Start(":1323"))
}
使用 RealIP()
功能很重要,否则您可能会得到代理的 IP 地址。