精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲人久久久| 久久国产一区二区三区| 无码aⅴ精品一区二区三区浪潮| 视频三区在线观看| 蜜桃av噜噜一区| 欧美激情女人20p| www.av天天| 91精品啪在线观看国产爱臀| 日韩欧美在线播放| 麻豆映画在线观看| 国产免费av高清在线| 国产成人在线视频网站| 国产成人拍精品视频午夜网站| 国产精品丝袜一区二区| 亚洲黄色录像| 精品国产一区二区亚洲人成毛片 | 国产在线高潮| 久久午夜免费电影| 丁香五月网久久综合| 中文无码av一区二区三区| 亚洲激情成人| 美女福利视频一区| 亚洲精品成人av久久| 欧美aaaaaaaa牛牛影院| 欧美一区二区三区四区五区 | 国产在线观看一区二区| 热久久这里只有| 久久成人国产精品入口| 日韩影院二区| 亚洲小视频在线观看| 99re这里只有| 亚洲综合色婷婷在线观看| 欧美日韩一区二区欧美激情| 国产极品美女高潮无套久久久| 欧美1234区| 亚洲免费看黄网站| 亚洲综合欧美日韩| 午夜在线免费观看视频| 国产视频一区在线播放| 免费看污久久久| 你懂的网站在线| 粉嫩嫩av羞羞动漫久久久| 91免费看片在线| 91高潮大合集爽到抽搐| 美女性感视频久久| 国产精品久久久久久久9999| 波多野结衣日韩| 日韩专区中文字幕一区二区| 欧美在线观看视频| 成人情趣视频| 懂色av一区二区三区四区| **国产精品| 欧美日韩午夜在线视频| 亚洲综合在线网站| 经典三级一区二区| 欧洲精品中文字幕| 午夜dv内射一区二区| 91精品韩国| 欧美日韩精品高清| 红桃视频 国产| 五月天色综合| 91精品国产日韩91久久久久久| 国产999免费视频| 青草伊人久久| 亚洲а∨天堂久久精品9966| 91精品啪在线观看国产| 久久超级碰碰| 亚洲欧美日韩中文视频| 好吊视频在线观看| 成人激情在线| 久久99久久99精品中文字幕| 久久久全国免费视频| 亚洲茄子视频| 国产精品扒开腿做| 国产视频第二页| 成人av免费网站| 欧美久久在线| 欧美一区二区三区| 亚洲午夜久久久久久久久电影网 | 理论片日本一区| 亚洲一区二区三区成人在线视频精品 | 欧美精品国产一区| 17婷婷久久www| 中文字幕免费在线看| 激情综合一区二区三区| 操一操视频一区| 精品乱码一区二区三四区视频| 欧美国产日韩a欧美在线观看| 无码毛片aaa在线| 蜜桃视频在线观看播放| 欧美日本一区二区三区| 极品白嫩少妇无套内谢| 九九视频免费观看视频精品 | 男女羞羞在线观看| 在线一区二区观看| 国产精品熟妇一区二区三区四区| 国产一区二区三区91| 精品国模在线视频| 久久国产视频播放| 黄一区二区三区| 欧美lavv| 国产乱码在线| 欧美精品亚洲二区| 性久久久久久久久久| 91亚洲成人| 51精品国产黑色丝袜高跟鞋 | 国产视频丨精品|在线观看| 三级黄色免费观看| 欧美极品免费| 日韩不卡在线观看日韩不卡视频| 欧美在线视频播放| 精品国产av一区二区| 国产亚洲综合性久久久影院| www.99riav| 久久亚洲精品人成综合网| 亚洲国产美女久久久久| 午夜激情福利网| 视频在线观看国产精品| 国产精品v欧美精品v日韩| 午夜不卡视频| 色天天综合久久久久综合片| 性生交大片免费看l| 久久蜜桃av| 国产成人综合亚洲| 天天射天天色天天干| 亚洲视频香蕉人妖| 在线免费av播放| 免费视频国产一区| 7777kkkk成人观看| 亚洲欧美激情另类| 亚洲精品va在线观看| 中文字幕资源在线观看| 成人同人动漫免费观看| 日本欧美精品在线| 牛牛热在线视频| 精品久久久久久久中文字幕| 污污污www精品国产网站| 国产综合自拍| 99国产在线观看| 2024最新电影免费在线观看| 亚洲精品一区国产| 精品国产乱码91久久久久久网站| 国产午夜手机精彩视频| 国产一区二区视频在线播放| 在线观看免费91| 日本黄色成人| 久久精品久久久久久| 在线视频 91| 国产精品久久久久久久久久免费看| 男人透女人免费视频| 亚州综合一区| 国产精品7m视频| www.在线播放| 欧美麻豆精品久久久久久| 欧美一区二区三区观看| 精品一区二区三区久久久| 中文视频一区视频二区视频三区| 日韩av黄色| 欧美另类高清videos| 亚洲国产欧美另类| 婷婷中文字幕综合| 黑人巨大精品欧美| 日本特黄久久久高潮| 一区二区成人国产精品| 不卡的国产精品| 久久久久五月天| 欧美女优在线| 91麻豆精品国产91久久久资源速度| 一级二级三级欧美| 国产精品自产拍| 亚洲人123区| 成人区人妻精品一区二| 久久成人免费| 中文字幕成人一区| 福利电影一区 | 国产一区高清| 久久69精品久久久久久国产越南| 少妇精品视频一区二区| 欧洲一区在线观看| 91视频免费在线看| 91理论电影在线观看| 亚洲五月天综合| 亚洲911精品成人18网站| 日韩有码中文字幕在线| 国产精品久久久久久中文字 | 九九热精品视频| 图片区 小说区 区 亚洲五月| 色系网站成人免费| 永久免费看片视频教学| 成人亚洲精品久久久久软件| 日韩一级在线免费观看| 婷婷亚洲最大| 精品伦理一区二区三区| 福利一区二区| 97香蕉超级碰碰久久免费软件| 成人免费视频| 亚洲成人精品在线| 亚洲天堂网视频| 亚洲电影在线免费观看| 亚洲精品视频网址| 成人午夜又粗又硬又大| 欧美三级在线播放| 亚洲精品成人无码熟妇在线| 国产麻豆一精品一av一免费| 亚洲中文字幕无码不卡电影| 在线看片不卡| 欧美久久电影| 精品精品国产毛片在线看| 国产精品日本精品| 色戒汤唯在线| 欧美国产日韩xxxxx| 国产69精品久久app免费版| 欧美成人高清电影在线| 中文字幕永久在线视频| 午夜伦理一区二区| 欧美激情国产精品免费| 国产精品久久夜| 国产十八熟妇av成人一区| 国产精品中文有码| 中文字幕国产免费| 日韩精品三区四区| 欧美在线观看成人| 亚洲国产清纯| www插插插无码免费视频网站| 国产精品91一区二区三区| 欧美日本国产精品| 亚洲精品国产精品粉嫩| 极品校花啪啪激情久久| 日韩一级淫片| 91免费看国产| 成人自拍视频| 91精品视频在线播放| 成人高清一区| 国产97在线视频| 国产亚洲一区二区手机在线观看 | 国产 欧美 日韩 在线| 夜夜亚洲天天久久| 免费中文字幕在线| 亚洲精品精品亚洲| 私库av在线播放| 亚洲精品日韩一| 麻豆明星ai换脸视频| 亚洲日本在线a| 日本福利片在线观看| 亚洲色图.com| 久久国产露脸精品国产| 一区二区三区在线免费观看| 日本高清一二三区| 亚洲一区二区三区四区在线免费观看 | 国产91久久精品一区二区| 亚洲色图欧洲色图| 无码熟妇人妻av| 国产欧美日韩视频在线观看| 亚洲码无人客一区二区三区| 国产日韩精品一区二区三区| 免费看污片的网站| 国产精品视频一二| 一级免费黄色录像| 中文字幕在线免费不卡| 日本黄色录像视频| 亚洲一区二区三区免费视频| 久久精品国产亚洲av高清色欲 | 久久国产精品免费一区二区三区| 91在线播放国产| av不卡一区二区| 国模精品娜娜一二三区| 欧美重口另类| 色综合久久久久久久久五月| 久久免费精品视频在这里| 一区二区三区av| 欧美日韩1区| 男人亚洲天堂网| 精品一区精品二区高清| 久久久久无码国产精品一区李宗瑞| av在线这里只有精品| 国产成人av一区二区三区不卡| 国产精品日日摸夜夜摸av| 午夜免费激情视频| 欧美天堂在线观看| 91高潮大合集爽到抽搐| 精品国产乱码久久久久久夜甘婷婷| 五月婷婷免费视频| www.国产精品一二区| 欧美极品aaaaabbbbb| 国产精品婷婷| aa免费在线观看| 国产福利电影一区二区三区| 在线观看av中文字幕| 国产精品久久久久久久久动漫| 久久久久国产精品夜夜夜夜夜| 日韩欧美国产网站| 国产情侣av在线| 亚洲女人天堂视频| 香蕉成人app免费看片| 欧美做爰性生交视频| 精品一区二区三区中文字幕在线| 久久99欧美| 中文无码久久精品| 成人在线观看a| 懂色av中文字幕一区二区三区 | 禁断一区二区三区在线| 国产一二三四五| 日韩和欧美一区二区三区| 中文字幕一二三区| 欧美国产日韩在线观看| 伊人365影院| 在线成人免费观看| 国产露出视频在线观看| 2欧美一区二区三区在线观看视频| 日韩精品xxx| 国产精品福利影院| 精品欧美一区二区三区免费观看| 91精品婷婷国产综合久久性色 | 国产精品久久久网站| 在线观看欧美激情| 日韩国产欧美视频| 在线视频 日韩| 亚洲一区二区在线免费看| 亚洲怡红院av| 一区二区三区四区视频| 高清av不卡| 九九九九精品| 精品99视频| 好吊操视频这里只有精品| 国产精品天干天干在线综合| www.国产一区二区| 日韩成人久久久| caoporn视频在线观看| av资源一区二区| 一区二区三区四区在线观看国产日韩 | 九九九久久久精品| 亚洲熟女少妇一区二区| 色婷婷av久久久久久久| 国产免费视频在线| 国产精品露脸自拍| 欧美码中文字幕在线| 成人3d动漫一区二区三区| 久久无码av三级| 亚洲av无码不卡| 国产午夜精品美女视频明星a级| 三妻四妾的电影电视剧在线观看| 九9re精品视频在线观看re6| 在线播放亚洲| 亚洲国产第一区| 欧美日韩精品中文字幕| 四虎电影院在线观看| 欧美一级片久久久久久久| 亚洲精品国产动漫| 亚洲欧美激情网| 国产精品久久久久aaaa樱花| 91麻豆视频在线观看| 美女久久久久久久| 国产suv精品一区| 久久综合色视频| 国产日韩成人精品| 中文字字幕在线中文乱码| 久久人人爽亚洲精品天堂| 国产999精品在线观看| 少妇一晚三次一区二区三区| 丰满少妇久久久久久久| 日韩欧美国产亚洲| 亚洲午夜激情免费视频| 九七电影院97理论片久久tvb| 亚洲精品在线免费| 国产精品夜夜爽| 日日夜夜综合网| 色哟哟网站入口亚洲精品| 9999精品免费视频| 国产a级片网站| 国产三级精品在线| 中文字幕+乱码+中文字幕明步| www国产精品视频| 亚洲三区欧美一区国产二区| 亚洲国产精品成人天堂| 国产午夜亚洲精品午夜鲁丝片 | 欧美videofree性高清杂交| 国产免费拔擦拔擦8x高清在线人| 欧美精品欧美精品系列c| 久久国产视频网| 国产精品18p| 亚洲天堂免费在线| 亚洲午夜精品| 国产精品igao| 一区二区三区91| www在线免费观看| 国产精品中出一区二区三区| 日韩精品一区第一页| 欧美日韩亚洲国产另类| 亚洲欧美国产另类| 欧美视频二区欧美影视| 2022亚洲天堂| 亚洲美女区一区| 你懂的好爽在线观看| 亚洲综合视频1区| 视频一区二区欧美| 久草国产在线观看| 一本色道久久综合狠狠躁篇怎么玩| 一区二区三区在线免费看| 男女男精品视频站| 午夜精品123|