package server import ( "admin/internal/context" "admin/internal/errcode" "admin/lib/xlog" "strings" ) func (srv *Server) CheckToken(ctx *context.WebContext) { reqPath := ctx.GinCtx().Request.URL.Path xlog.Tracef("请求路径:%v, 头:%+v", reqPath, ctx.GinCtx().Request.Header) if strings.Contains(reqPath, "/login") { return } if len(reqPath) > 3 && reqPath[:4] != "/api" { // 用来过滤出非/api请求,前后端部署到一起时,访问静态页面的请求跳过token检查 ctx.GinCtx().Next() return } err := ctx.ExtractHeader() if err != nil { ctx.Fail(errcode.New(errcode.HeaderParamsInvalid, "header invalid")) return } err = srv.svc.CheckToken(ctx.Header.Token, ctx.Header.UserId) if err != nil { ctx.Fail(err) ctx.GinCtx().Abort() } else { ctx.GinCtx().Next() } }