自己写golang web框架之中间件模块

废话不多说直接上干货。。。。

1、定义中间件嵌套函数类型
type HttpHandlerDecorator func(http.Handler) http.Handler
2、实现中间件嵌套函数
func MidHandler(h http.Handler, decors ...HttpHandlerDecorator) http.Handler {
   for i:=len(decors) -1; i>=0; i-- {
      deco := decors[i]
      h = deco(h)
   }
   return h
}
3、实现自定义中间件(校验签名)
func CheckSignature(h http.Handler) http.Handler {
   return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
      var signString string
      var hmacObj hash.Hash
      uri := r.URL.Path[1: len(r.URL.Path)]
      signatureList := r.Header["sign"]
      if len(signatureList) != 1 {
         //r.Header["localCheckResult"] = []string{"Please input sign parameter."}
         goto END
      }
      signString = fmt.Sprintf("%s&%s&%s", r.Method, uri, akskList[0])
      hmacObj = hmac.New(sha1.New, []byte(akskList[1]))
      hmacObj.Write([]byte(signString))
      if signatureList[0] != hex.EncodeToString(hmacObj.Sum(nil)) {
         //r.Header["localCheckResult"] = []string{"Check sign failed, please input right sign."}
         goto END
      }

      END:
         h.ServeHTTP(w, r)
   })
}

4、http 路由注册是调用中间件

http.Handle("/record", middleware.MidHandler(lib.PackHandler(&controllers.RecordHandler{}), middleware.CheckSignature))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值