精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

100行代碼實現審計日志中間件

開發(fā) 前端
個人認為有以下幾個優(yōu)勢:(1)中間件的方式可靈活地匹配路由組,從而靈活地指定需要記錄日志的路由組;(2)同一個路由組中通過context value 來區(qū)分接口是否需要記錄操作日志;(3)業(yè)務處理函數中可靈活配置需記錄內容,不需集中處理。

本文轉載自微信公眾號「小小平頭哥」,作者小小平頭哥。轉載本文請聯系小小平頭哥公眾號。

審計日志管理是我們在web系統開發(fā)中的常見的模塊,雖然它有時并不屬于業(yè)務模塊的范疇,但對于系統整體來說卻十分關鍵,用戶的操作(尤其是關鍵操作)、用戶的登錄,我們的系統都應加以記錄,以便后續(xù)溯源。

日志管理的方案可以看到很多,本文介紹的是一種基于Golang Gin框架的自定義中間件的實現方案,為大家拋磚引玉了。

個人認為有以下幾個優(yōu)勢:

(1)中間件的方式可靈活地匹配路由組,從而靈活地指定需要記錄日志的路由組;

(2)同一個路由組中通過context value 來區(qū)分接口是否需要記錄操作日志;

(3)業(yè)務處理函數中可靈活配置需記錄內容,不需集中處理。

本文轉載自微信公眾號「小小平頭哥」,作者小小平頭哥。轉載本文請聯系小小平頭哥公眾號。

01整體流程

1) 中間件函數整體的流程

圖片圖片

2) 業(yè)務函數流程

圖片圖片

02代碼實現

1) 中間件函數實現

type Response struct {
  Code int `json:"code" bson:"code"`
}
type bodyLogWriter struct {
  gin.ResponseWriter
  body *bytes.Buffer
}


func (w bodyLogWriter) Write(b []byte) (int, error) {
  w.body.Write(b)
  return w.ResponseWriter.Write(b)
}


const (
  HttpRespSuccessCode = 0
)


// Logger 日志記錄
func Logger() gin.HandlerFunc {
  return func(c *gin.Context) {
   //備份請求體
    blw := &bodyLogWriter{body: bytes.NewBufferString(""), ResponseWriter: c.Writer}
    c.Writer = blw
    //繼續(xù)執(zhí)行請求
    c.Next()
    //判斷記錄標志
    needToLog, ok := c.Get("need_to_log")
    if !ok {
      log.Warn("獲取是否需要記錄日志失敗")
      return
    }
    if !needToLog.(bool) {
      return
    }
    //也可以在這兒加入白名單 判斷是否是不需記錄的URL
    /*
      url := c.Request.RequestURI
      if strings.Index(url, "logout") > -1 ||
        strings.Index(url, "login") > -1 {
        return
      }
    */
    // 獲取請求的HTTP狀態(tài)碼
    statusCode := c.Writer.Status()
    // 獲取請求IP
    clientIP := common.GetClientIP(c)
    isSuccess := false
    //若HTTP狀態(tài)碼為200
    if c.Writer.Status() == http.StatusOK {
      var resp Response
      // 獲取返回的數據
      err := json.Unmarshal(blw.body.Bytes(), &resp)
      if err != nil {
        log.Warn("Logs Operation Unmarshal Error: %s", err.Error())
        return
      }
      //判斷操作是否成功 需結合業(yè)務函數的返回值結構
      if resp.Code == HttpRespSuccessCode {
        isSuccess = true
      }
    }
    if statusCode != http.StatusNotFound {
      SetDBLog(c, clientIP, isSuccess)
    }
  }
}


// SetDBLog 寫入日志表
func SetDBLog(c *gin.Context, clientIP string, status bool) {
  user, ok := c.Get("user")
  if !ok {
    log.Warn("審計日志-獲取用戶名失敗")
  }
  //日志格式化 然后入庫
  logInfo := table.Logs{}
  //構造日志ID 可使用其他方式替代
  logInfo.LogID = NewNanoid()
  if user != nil {
    logInfo.Username = user.(string)
  }
  operatorType, exist := c.Get("operation_type")
  if exist {
    logInfo.OperationType = operatorType.(string)
  }
  logInfo.IP = clientIP
  operation, exist := c.Get("operation")
  if exist {
    logInfo.Description = operation.(string)
  }
  if status == true {
    logInfo.Description = logInfo.Description + "成功"
  } else {
    logInfo.Description = logInfo.Description + "失敗"
  }
  //日志入庫
  err := InsertLog(logInfo)
  if err != nil {
    log.Warn("InsertLog %s error, %s", logInfo.LogID, err.Error())
  }
}


// InsertLog 插入log
func InsertLog(logs table.Logs) error {


}


2) 業(yè)務函數實現

func (User) UserLoginOut(c *ctx.Context) {
  //設定記錄日志標志
  c.Set("need_to_log", true)
  //設定操作類型
  c.Set("operation_type", "用戶退出登錄")
  //設定具體操作
  c.Set("operation", "用戶退出登錄")
  c.Success()
}

3) 路由組應用

//設定路由組
  UserRouter := apiV1Group.Group("users")
  //為路由組應用中間件
  UserRouter.Use(middleware.Logger())


03注意事項

1) 中間件處理函數中的備份原始請求體很重要,否則可能會出現業(yè)務代碼無法獲取請求參數的情況;

  1. 中間件的報錯不應影響原有業(yè)務邏輯。

原文鏈接:https://mp.weixin.qq.com/s/7HAVAAst5IyywLxdNdTQ5g

責任編輯:武曉燕 來源: 小小平頭哥
相關推薦

2014-06-20 09:18:54

Dustjs中間件

2015-12-21 14:56:12

Go語言Http網絡協議

2011-05-24 15:10:48

2021-02-11 08:21:02

中間件開發(fā)CRUD

2025-08-04 04:00:05

SpringFolkMQ消息中間件

2020-06-28 09:20:33

代碼開發(fā)Go

2018-07-29 12:27:30

云中間件云計算API

2018-02-01 10:19:22

中間件服務器系統

2016-11-11 21:00:46

中間件

2010-03-24 17:59:20

2009-06-16 15:55:06

JBoss企業(yè)中間件

2012-11-30 10:21:46

移動中間件

2023-06-29 10:10:06

Rocket MQ消息中間件

2023-10-24 07:50:18

消息中間件MQ

2010-04-13 10:37:47

核高基中間件

2022-09-21 16:09:28

消息中間件

2021-07-19 07:55:24

Redux中間件原理

2012-11-01 15:16:22

金蝶中間件研究院院長

2021-06-15 10:01:02

應用系統軟件

2011-10-24 07:41:38

SOA中間件應用服務器
點贊
收藏

51CTO技術棧公眾號

伊人婷婷欧美激情| 国内精品自线一区二区三区视频| 日韩风俗一区 二区| 99久久激情视频| 黄色国产网站在线播放| jiyouzz国产精品久久| 国产成人精品在线| 欧美爱爱免费视频| 一区二区美女| 日韩一区二区高清| 免费黄色特级片| 亚洲国产精品精华素| 91蜜桃在线免费视频| 成人黄色av网站| 国产免费av一区| 欧美jjzz| 在线观看91久久久久久| 影音先锋黄色资源| 国产精品亚洲欧美日韩一区在线| 欧美日韩亚洲一区二区| 韩国黄色一级大片| 成年人在线看| 91一区二区三区在线观看| 亚洲一区二区少妇| 特级西西444www高清大视频| 国产精品扒开腿做爽爽爽软件| 影音先锋欧美精品| 精品少妇一区二区三区免费观| 国语精品视频| 精品视频一区二区三区免费| 内射国产内射夫妻免费频道| av在线下载| 国产精品久久久久久久裸模| 久久99导航| 亚洲经典一区二区| 国内精品写真在线观看| 国产精品视频自在线| 可以免费看的av毛片| 在线看片日韩| 欧美极品第一页| 九九热国产在线| 亚洲成人国产| 精品国产拍在线观看| 1024在线看片| 色狮一区二区三区四区视频| 国产亚洲欧洲在线| 黄色av免费播放| 国产欧美亚洲精品a| 亚洲女人天堂色在线7777| 免费看毛片的网站| 精品按摩偷拍| 日韩av在线看| aa一级黄色片| 精品一区免费| 中文字幕无线精品亚洲乱码一区 | 日韩一区在线播放| 涩涩涩999| 五月天婷婷在线视频| 国产精品美女一区二区三区| 中文字幕黄色大片| 国产精品剧情| 亚洲国产精品人人做人人爽| 精品少妇在线视频| 筱崎爱全乳无删减在线观看| 色综合网色综合| 亚洲国产精品三区| 国产精品久久久久久久久久辛辛 | 五月婷婷综合久久| 久久久久久久综合| 一区二区三区视频在线播放| 欧美性videos| 亚洲最大成人网4388xx| 欧美国产日韩激情| free欧美| 在线不卡a资源高清| 久草福利在线观看| 日韩av午夜| 中文字幕亚洲无线码在线一区| 亚洲欧美综合7777色婷婷| 欧美成人69av| 欧美在线激情网| 在线免费看毛片| 国产不卡视频一区二区三区| 精品一区日韩成人| 午夜视频成人| 亚洲va欧美va人人爽午夜| 日韩精品无码一区二区三区免费 | 美女国产一区| 91社区国产高清| 五月婷婷伊人网| 中文字幕五月欧美| 国产精品网站免费| 深夜日韩欧美| 国产午夜精品久久久 | 久草视频在线看| 国产精品久久精品日日| 无码av天堂一区二区三区| 日韩一区二区三区免费| 欧美变态凌虐bdsm| 九九热久久免费视频| 雨宫琴音一区二区在线| 国产精品美女久久久久久免费| 亚洲精品一区二区三区新线路| 久久久久久久久免费| 国产精品自拍合集| 欧洲美女精品免费观看视频| 亚洲国产精品久久91精品| 亚洲精品国产精品乱码在线观看| 亚洲电影成人| 91久久久亚洲精品| 国产高清视频免费最新在线| 亚洲一区二区黄色| 九一精品久久久| 精品国产一区二区三区香蕉沈先生| 欧美老女人xx| 91影院在线播放| 久久蜜桃一区二区| cao在线观看| 激情不卡一区二区三区视频在线| 亚洲天堂av图片| 亚洲欧美在线视频免费| 国产不卡视频一区二区三区| 一区二区三区四区视频在线观看| 在线观看的黄色| 精品91自产拍在线观看一区| 岛国毛片在线观看| 狠狠网亚洲精品| 亚洲欧美国产精品桃花| 午夜欧美巨大性欧美巨大 | 亚洲综合在线播放| 欧美成人视屏| 欧美久久高跟鞋激| 一二三四在线观看视频| 日韩精品福利网| 欧美精品123| 在线视频超级| 亚洲精品资源美女情侣酒店 | 亚洲欧美日韩专区| 国产综合欧美在线看| 丁香花在线高清完整版视频| 日韩三级免费观看| 欧美精品一区二区蜜桃| 国产成人啪午夜精品网站男同| 精品91一区二区三区| 亚州精品国产| 久久精品久久久久| 国产精品毛片一区二区在线看舒淇| 国产精品天美传媒| 美女少妇一区二区| 欧美电影《睫毛膏》| 成人国产在线激情| 婷婷在线播放| 亚洲精品一区二区三区精华液 | 日本va欧美va瓶| 亚洲国产日韩综合一区| 成人黄色在线| 久久精品久久精品亚洲人| 91亚洲视频在线观看| 亚洲美女淫视频| 性高潮久久久久久| 亚洲三级免费| 日本成人三级电影网站| 久久天天久久| 九九视频这里只有精品| 三级网站在线看| 欧美日韩中国免费专区在线看| 国产精品成人一区二区三区电影毛片| 噜噜噜91成人网| 亚洲日本无吗高清不卡| 久久久久久久久成人| 欧美激情中文字幕乱码免费| 天堂在线中文字幕| 91成人免费网站| 91狠狠综合久久久| 成人午夜视频在线| 国产九九在线视频| 午夜国产一区| 欧美一区二区福利| 免费观看亚洲天堂| 欧美专区中文字幕| 日韩精品成人av| 欧美精品一区二区三区很污很色的| 91美女免费看| **欧美大码日韩| 黄色性视频网站| 青青草国产成人99久久| 精品久久久无码人妻字幂| 亚洲日产av中文字幕| 91最新在线免费观看| 僵尸再翻生在线观看免费国语| 中文字幕亚洲欧美日韩在线不卡| 亚洲成人一二三区| 欧洲一区二区三区在线| 黄页网站免费观看| 国产亚洲欧洲一区高清在线观看| 在线a免费观看| 麻豆91精品| 老子影院午夜伦不卡大全| 国产欧美日韩| 国产日韩一区二区三区| 亚洲老司机网| 98精品国产自产在线观看| 免费在线观看av网站| 日韩成人av在线播放| 国产区精品在线| 色综合久久久网| 日本三级网站在线观看| 国产精品夫妻自拍| 国产精品成人一区二区三区电影毛片| 国产精品伊人色| 国产精品入口免费软件| 99国产精品自拍| 男女裸体影院高潮| 91视频一区| 欧美精品中文字幕一区二区| 66精品视频在线观看| 成人国产精品久久久久久亚洲| 刘亦菲一区二区三区免费看| 久久免费精品视频| 综合久久2019| 久久精品一本久久99精品| 久久久久国产精品嫩草影院| 亚洲成人精品久久久| 精品毛片在线观看| 91精品国产乱| 国产精品一区二区人人爽| 欧美午夜不卡视频| 精品久久久久久久久久久国产字幕| 亚洲高清免费观看 | 国产艳俗歌舞表演hd| 国产aⅴ综合色| 青青草精品在线| 韩国成人在线视频| 爱豆国产剧免费观看大全剧苏畅| 奇米888四色在线精品| 欧美午夜性生活| 久久永久免费| www.超碰com| 日韩高清一区二区| 五月天激情视频在线观看| 三级欧美在线一区| 熟女少妇精品一区二区| 免费一区视频| 91av在线免费播放| 日本vs亚洲vs韩国一区三区二区| 我看黄色一级片| 久久精品国产精品亚洲红杏| 亚洲欧洲日本精品| 精品无人码麻豆乱码1区2区| 天天av天天操| 国产成人在线观看免费网站| 无码人妻久久一区二区三区蜜桃| 国产黑丝在线一区二区三区| 污免费在线观看| 丁香另类激情小说| 我和岳m愉情xxxⅹ视频| 国产日产欧美一区二区视频| 刘亦菲国产毛片bd| 亚洲欧美电影一区二区| 国产午夜精品无码| 欧美性猛交xxxx富婆弯腰| 伊人久久久久久久久久久久 | 99久久视频| 中文字幕精品在线播放| 国产字幕视频一区二区| 国内性生活视频| 男女男精品视频| 国产精品久久久久久久99| 成人午夜视频在线观看| 人人妻人人澡人人爽人人精品| 国产三级一区二区| 国产中文av在线| 香蕉成人啪国产精品视频综合网| 一级黄色大片视频| 欧美另类久久久品| 黄片毛片在线看| 原创国产精品91| 亚洲七七久久综合桃花剧情介绍| 7m精品福利视频导航| 成人免费黄色| 成人自拍视频网站| 国产精品自拍区| 精品一区二区三区毛片| 亚洲欧美日本日韩| 久久久精品视频国产| av亚洲精华国产精华精华| 欧美亚洲色综久久精品国产| 一区二区三区不卡在线观看| 神马久久久久久久| 日韩欧美色综合网站| 久久精品蜜桃| 久久人91精品久久久久久不卡| 日韩精品第一| 国产一区二区三区四区hd | 国产精品入口芒果| 日韩av电影天堂| 国产一卡二卡三卡四卡| 中文字幕国产一区| 三级黄色在线视频| 欧美一区二区网站| jizz在线免费观看| 91超碰中文字幕久久精品| 国产999精品在线观看| 免费看污久久久| 樱桃成人精品视频在线播放| 超碰超碰在线观看| 97se亚洲国产综合自在线观| 神马午夜精品91| 欧美亚洲高清一区| 性插视频在线观看| 欧美精品九九久久| 久久99成人| 成人手机视频在线| 人人超碰91尤物精品国产| 国产又粗又长又爽| 一区二区三区成人| 国产欧美综合视频| 中文字幕亚洲一区二区三区五十路 | 岛国av一区| 日本中文字幕一级片| 国内一区二区在线| 国产成人精品视频免费| 色婷婷久久久亚洲一区二区三区 | 99精品一区二区| 一区二区视频免费看| 欧美日韩成人综合在线一区二区| 韩国福利在线| 日本欧美爱爱爱| 伊人久久大香线蕉综合网站| 黄页网站大全在线观看| 成人网在线免费视频| 美女毛片在线观看| 日韩欧美国产三级电影视频| 国产剧情在线| 亚洲一区二区免费在线| 国产精品久久久久久影院8一贰佰 国产精品久久久久久麻豆一区软件 | 三级一区二区三区| 中文字幕日本不卡| 亚洲视频中文字幕在线观看| 国产一区二区精品丝袜| 婷婷午夜社区一区| 欧美亚洲另类久久综合| 香蕉亚洲视频| 精品无码人妻一区| 在线观看不卡一区| 在线观看精品一区二区三区| 国产精品久久久久秋霞鲁丝| 精品久久中文| 中文字幕第38页| **欧美大码日韩| www.黄色片| 久久理论片午夜琪琪电影网| 999精品视频在这里| 波多野结衣之无限发射| 99re热视频精品| 日本黄色一级视频| 综合av色偷偷网| 99tv成人影院| 日韩黄色片在线| 99久久久久久99| 国产一级淫片a视频免费观看| 亚洲午夜av电影| 先锋影音网一区二区| 中国黄色录像片| 成人精品视频.| 精品国产xxx| 日韩视频第一页| 高潮久久久久久久久久久久久久 | 黄色在线观看免费| 亚洲黄色在线观看| 欧美va在线| 狠狠精品干练久久久无码中文字幕 | 欧美性猛交一区二区三区精品| 自拍视频在线| 国产精品午夜av在线| 老司机精品久久| 久久久久99精品成人片试看| 日韩经典一区二区三区| 国产亚洲人成a在线v网站| 国产激情在线看| 久久久99精品免费观看不卡| 国产乱码精品一区二三区蜜臂 | 中文字幕在线看人| 久久天天躁夜夜躁狠狠躁2022| eeuss鲁片一区二区三区| 青青在线视频免费| 亚洲线精品一区二区三区| 黄色av免费在线观看| 91免费人成网站在线观看18| 在线视频免费在线观看一区二区| 性爱在线免费视频| 日韩精品极品毛片系列视频| 日本在线一区二区| 国产精品后入内射日本在线观看| 国产精品久久久久久亚洲毛片 | 久久精品男人天堂av| www.黄色片| 国产一区深夜福利| 午夜一区不卡| 国产亚洲精品久久777777|