go fiber:全域性中介軟體新增排除的path

刘宏缔的架构森林發表於2024-11-16

一,程式碼:

全域性中介軟體對所有的api生效,

如果有個別不想應用全域性中介軟體的api,
則需要從程式碼中進行排除:例如:支付寶或微信的回撥介面

package middleware

import (
	"fmt"
	"github.com/gofiber/fiber/v2"
    "regexp"
)

func ApiSign(c *fiber.Ctx) error {


        //得到當前url
		uri := c.Request().URI()    //最完整的路徑,形如:http://192.168.219.6:3000/user/info?name=111
		fmt.Println(uri)

        fullURL := c.OriginalURL()  //包含引數,但沒有host,形如:/user/info?name=111
        fmt.Println(fullURL)

        path:=c.Path()               //不包含引數,也沒有host,形如:/user/info
        fmt.Println(path)

        if path=="/favicon.ico" {
              return c.SendString("檔案不存在,file not exist")
        }
    
        //以*排除
		exclude := regexp.MustCompile("/user/*")
		if exclude != nil && exclude.MatchString(path) {
            fmt.Println(path+" 被排除,不需要驗證簽名")
			return c.Next()
		}

		//列舉出要排除的路徑
        excludeMap := map[string]int{
		"/article/add": 1,
		"/article/list": 1,
	   }

       if _, ok := excludeMap[path]; ok {
		fmt.Println(path+" 被排除,不需要驗證簽名")
        return c.Next()
	   } else {
		 fmt.Println(path+" 未被排除,需要驗證簽名")
         //驗證簽名的邏輯
	   }


	fmt.Println("middle1 before")
	err:=c.Next()
	fmt.Println("middle1 after")
	return err
}

分別用了兩種方式檢測是否要排除

二,測試效果:

http://192.168.219.6:3000/article/info?name=111
/article/info?name=111
/article/info
/article/info 未被排除,需要驗證簽名
middle1 before
middle1 after

http://192.168.219.6:3000/article/list?name=111
/article/list?name=111
/article/list
/article/list 被排除,不需要驗證
middle1 before
Query Params: map[name:111]

相關文章