go fiber:全局中间件添加排除的path

一,代码:

全局中间件对所有的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]

 

posted @ 2024-11-16 12:45  刘宏缔的架构森林  阅读(5)  评论(0编辑  收藏  举报