github.com/SupenBysz/gf-admin-community@v0.7.4/internal/logic/sys_middleware/sys_middleware.go (about) 1 package sys_middleware 2 3 import ( 4 "github.com/SupenBysz/gf-admin-community/sys_model" 5 "github.com/SupenBysz/gf-admin-community/sys_service" 6 "github.com/SupenBysz/gf-admin-community/utility/response" 7 "github.com/gogf/gf/v2/container/garray" 8 "github.com/gogf/gf/v2/errors/gcode" 9 "github.com/gogf/gf/v2/errors/gerror" 10 "github.com/gogf/gf/v2/frame/g" 11 "github.com/gogf/gf/v2/net/ghttp" 12 ) 13 14 type sMiddleware struct{} 15 16 func init() { 17 sys_service.RegisterMiddleware(New()) 18 } 19 20 // New MiddlewareMiddleware 权限控制 21 func New() *sMiddleware { 22 return &sMiddleware{} 23 } 24 25 // Auth 通讯鉴权 26 func (s *sMiddleware) Auth(r *ghttp.Request) { 27 sys_service.Jwt().Middleware(r) 28 } 29 30 // CTX 自定义上下文对象 31 func (s *sMiddleware) CTX(r *ghttp.Request) { 32 // 初始化,务必最开始执行 33 customSessionCtx := &sys_model.SessionContext{ 34 JwtClaimsUser: &sys_model.JwtCustomClaims{}, 35 SessionErrorQueue: garray.NewArray(), 36 Ipv4: r.RemoteAddr, 37 } 38 39 sys_service.SysSession().Init(customSessionCtx, r) 40 41 // 将自定义的上下文对象传递到模板变量中使用 42 r.Assigns(g.Map{ 43 "Context": customSessionCtx, 44 }) 45 // 执行下一步请求逻辑 46 r.Middleware.Next() 47 } 48 49 // CORS 允许接口跨域请求 50 func (s *sMiddleware) CORS(r *ghttp.Request) { 51 // corsOptions := r.Response.DefaultCORSOptions() 52 // corsOptions.AllowOrigin = "*" 53 // corsOptions.AllowCredentials = "true" 54 // corsOptions.AllowHeaders = "Content-Type,Access-Token" 55 // corsOptions.AllowDomain = []string{"127.0.0.1:3000", "0.0.0.0:3000"} 56 // corsOptions.ExposeHeaders = "*" 57 // corsOptions.AllowMethods = "POST,GET,OPTIONS,DELETE" 58 // r.Response.CORS(corsOptions) 59 r.Response.CORSDefault() 60 r.Middleware.Next() 61 } 62 63 // ResponseHandler 响应函数 64 func (s *sMiddleware) ResponseHandler(r *ghttp.Request) { 65 r.Middleware.Next() 66 67 // 如果已经有返回内容,那么该中间件什么也不做 68 if r.Response.BufferLength() > 0 { 69 return 70 } 71 72 var ( 73 err = r.GetError() 74 res = r.GetHandlerResponse() 75 code gcode.Code = gcode.CodeOK 76 ) 77 78 if err != nil { 79 code = gerror.Code(err) 80 if code == gcode.CodeNil { 81 code = gcode.CodeInternalError 82 } 83 84 response.JsonExit(r, code.Code(), err.Error()) 85 } else { 86 response.JsonExit(r, code.Code(), "", res) 87 } 88 }