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
}