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  }