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
}

posted @   Amani_Bey  阅读(84)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示