auth.go
/**
* @Description: ip拦截器
* @Author: Walker
* @Date: 2021/4/16
*/
package auth
import (
"github.com/gin-gonic/gin"
"net/http"
ip2 "wxtokenmicroservice/service/ip"
service "wxtokenmicroservice/utils/ip"
)
//返回类型:HandlerFunc
func IpAuthorize() gin.HandlerFunc {
return func(c *gin.Context) {
//获取ip
ip := service.GetRealIp(c.Request)
//查询数据库是否存在该ip
res := ip2.IfExistsIp(ip)
if res == 1 {
// 验证通过,会继续访问下一个中间件
c.Next()
} else {
// 验证不通过,不再调用后续的函数处理
c.Abort()
c.JSON(http.StatusUnauthorized, gin.H{
"code": 401,
"message": "访问未授权",
"data": res,
})
// return可省略, 只要前面执行Abort()就可以让后面的handler函数不再执行
return
}
}
}
获取ip
package

本文介绍了如何在Gin web框架中实现一个IP拦截器,用于验证请求的IP是否存在于数据库中。`auth.go`文件展示了获取真实IP的逻辑以及定义了`IpAuthorize`中间件,该中间件会检查IP并决定是否允许请求继续。如果IP不在数据库中,则返回401未授权响应。`service`包提供了获取客户端IP的方法,包括`ClientIp`和`ClientPublicIP`,以处理反向代理的情况。`router.go`文件展示了如何将`IpAuthorize`中间件应用于需要IP验证的API路由上。
最低0.47元/天 解锁文章

6万+

被折叠的 条评论
为什么被折叠?



