1 Star 0 Fork 0

xlizy/common-go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
middleware.go 3.75 KB
一键复制 编辑 原始数据 按行查看 历史
xlizy 提交于 2024-12-19 15:40 . save
package middleware
import (
"fmt"
"gitee.com/xlizy/common-go/base/common_config"
"gitee.com/xlizy/common-go/base/common_const"
"gitee.com/xlizy/common-go/base/common_goroutine"
"gitee.com/xlizy/common-go/base/enums/common_error"
"gitee.com/xlizy/common-go/base/response"
"gitee.com/xlizy/common-go/components/orm/tx"
"gitee.com/xlizy/common-go/components/universal"
"gitee.com/xlizy/common-go/utils/common_utils"
rm "gitee.com/xlizy/common-go/utils/middleware/router_manage"
"gitee.com/xlizy/common-go/utils/threadlocal"
"gitee.com/xlizy/common-go/utils/zlog"
"gitee.com/xlizy/rpc-interface/rpc_pbs"
"github.com/google/uuid"
"github.com/kataras/iris/v12/context"
"runtime"
"strings"
"time"
)
var Default = func(ctx *context.Context) {
traceId := ctx.GetHeader("X-Request-Id")
if traceId == "" {
traceId = uuid.New().String()
}
threadlocal.SetTraceId(traceId)
userId := ctx.GetHeader("X-Request-UserId")
if userId != "" {
threadlocal.SetUserId(userId)
}
zlog.Info("MainHandlerName:{},router:{}", ctx.GetCurrentRoute().MainHandlerName(), ctx.RouteName())
ctx.Next()
}
var SaveOp = func(ctx *context.Context) {
if lr, ok := rm.IrisRouterMap[ctx.RouteName()]; ok {
if lr.SaveOp {
req := &rpc_pbs.UserOperationBehaviorReq{
UserId: threadlocal.GetUserId(),
ServerName: common_config.GetAppName(),
ApiPath: ctx.RouteName(),
EventCode: ctx.GetCurrentRoute().MainHandlerName(),
EventName: rm.IrisRouterMap[ctx.RouteName()].Description,
ExtendData: "{}",
Ipv4: common_utils.RemoteIp(ctx.Request()),
Ipv6: "",
Device: "未知",
UserAgent: ctx.Request().UserAgent(),
SomeId: ctx.Request().Header.Get("X-Request-Some"),
TraceId: threadlocal.GetTraceId(),
BehaviorTime: time.Now().Format(common_const.DataFormat),
}
traceId := threadlocal.GetTraceId()
_ = common_goroutine.GetNonBlockingAntsPool().Submit(func() {
threadlocal.SetUserId(traceId)
universal.SaveUserOperationBehavior(req)
})
}
}
ctx.Next()
}
var CrossDomain = func(ctx *context.Context) {
ctx.Header("Access-Control-Allow-Origin", ctx.Request().Header.Get("Origin"))
ctx.Header("Access-Control-Allow-Headers", "Content-Type,Content-Disposition,X-Request-Id,X-Request-Some")
ctx.Header("Access-Control-Expose-Headers", "Content-Length,Access-Control-Allow-Origin,Access-Control-Allow-Headers,Content-Type,cache-control,Set-Auth,Content-Disposition")
ctx.Header("Access-Control-Allow-Methods", "GET,POST,OPTIONS,PUT,DELETE,PATCH,HEAD,TRACE")
ctx.Header("Access-Control-Allow-Credentials", "true")
ctx.Header("Access-Control-Max-Age", "7200")
if ctx.Request().Method == "OPTIONS" {
ctx.StatusCode(200)
} else {
ctx.Next()
}
}
var NeedLogin = func(ctx *context.Context) {
userId := ctx.GetHeader("X-Request-UserId")
if userId == "" {
ctx.JSON(response.Error(common_error.NOT_LOGGED_IN, nil))
} else {
if userId != "" {
threadlocal.SetUserId(userId)
ctx.Next()
} else {
ctx.JSON(response.Error(common_error.NOT_LOGGED_IN, nil))
}
}
}
var GlobalRecover = func(ctx *context.Context) {
defer func() {
if err := recover(); err != nil {
if ctx.IsStopped() {
return
}
if tx.IsInTX() {
tx.NeedRollback()
tx.TryCommit()
}
var stacktrace string
for i := 1; ; i++ {
_, f, l, got := runtime.Caller(i)
if !got {
break
}
stacktrace += fmt.Sprintf("%s:%d\n", f, l)
}
errMsg := fmt.Sprintf("%s", err)
zlog.Info("异常Ctl入口:{}", ctx.HandlerName())
zlog.Error("ErrorInfo:{}", errMsg)
// 返回错误信息
if strings.HasPrefix(errMsg, "") {
_ = ctx.JSON(response.Error(common_error.SYSTEM_ERROR, errMsg))
}
ctx.StatusCode(500)
ctx.StopExecution()
}
}()
ctx.Next()
if tx.IsInTX() {
tx.TryCommit()
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/xlizy/common-go.git
git@gitee.com:xlizy/common-go.git
xlizy
common-go
common-go
v0.4.16

搜索帮助