go 简单的拦截器
用的是gin,gin拦截器相对于java 的实现非常简单
package handle
import (
"github.com/gin-gonic/gin"
"log"
"net/http"
)
// AuthUser 返回类型:HandlerFunc
func AuthUser() gin.HandlerFunc {
return func(c *gin.Context) {
cookie, err := c.Cookie("jilijili-token")
if err != nil {
log.Println("获取Cookie错误:", err)
c.Abort()
c.JSON(http.StatusUnauthorized, gin.H{
"flag": 401,
"message": "访问未授权",
"data": nil,
})
// return可省略, 只要前面执行Abort()就可以让后面的handler函数不再执行
return
}
log.Println("访问令牌: cookie", cookie)
// 验证通过,会继续访问下一个中间件
c.Next()
}
}
router 就可以定义 ,访问/test 会执行拦截器 ,访问/index正常执行
func Router() *gin.Engine {
r := gin.Default()
r.GET("/index", service.GetIndex)
r.Use(handle.AuthUser())
r.GET("/test", service.TestApi)
return r
}
当然也可以api分组拦截
func Router() *gin.Engine {
r := gin.Default()
docs.SwaggerInfo.BasePath = "/"
baseGroup := r.Group("/")
baseGroup.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
baseGroup.GET("/index", service.GetIndex)
baseGroup.GET("/test", service.TestApi)
seckillGroup := r.Group("/seckill")
seckillGroup.Use(handle.AuthUser(), handle.InterceptParams())
seckillGroup.GET("/kill/list", service.GetSeckillList)
return r
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律