首页 > 其他分享 >go fiber:全局中间件添加排除的path

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

时间:2024-11-16 12:41:20浏览次数:1  
标签:fiber name fmt 中间件 Println 111 path go article

一,代码:

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

 

标签:fiber,name,fmt,中间件,Println,111,path,go,article
From: https://www.cnblogs.com/architectforest/p/18546861

相关文章

  • go fiber: 把异常信息写到错误日志中
    一,代码:1,userBusiness.gopackagebusinessimport("fmt")//得到多个用户,按分页返回funcGetUserList(pageint,pageSizeint)(string,error){b:=0a:=100/bfmt.Println(a)return"1,2,3",nil}代码中包含有除0错,会引发panic2,userControlle......
  • golang: 在线上用nginx部署应用
    一,启动应用:1,编译程序$gobuild2,用nohup启动应用的二进制程序$nohup/data/goapp/industry/industry>>/data/logs/gologs/back.log2>&1&[1]48963,检查应用是否启动:$ss-lntp|grep3000LISTEN040960.0.0.0:30000.0.0.0:*users:(("......
  • go fiber: 增加访问日志accesslog
    一,代码这里我们使用官方提供的github.com/gofiber/fiber/v2/middleware/logger这个现成的中间件官方文档地址:https://docs.gofiber.io/api/middleware/logger/routes.gopackageroutesimport( "github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2/middleware/......
  • go fiber: 多个全局中间件的执行顺序
    一,代码:middleware.gopackagemiddlewareimport( "fmt" "github.com/gofiber/fiber/v2")funcMiddle1(c*fiber.Ctx)error{ fmt.Println("middle1before") err:=c.Next() fmt.Println("middle1after") returnerr}......
  • go fiber:路由中间件
    一,目录结构:二,代码1,中间件代码packagemiddlewareimport( "fmt" "github.com/gofiber/fiber/v2" "industry/config")//token校验funcCheckUser(c*fiber.Ctx)error{ token:=c.Query("token") fmt.Println("token:"......
  • django naive datetime问题
    naivedatetime问题,其实就是datetime数据没有携带时间就传递给了模型类现象:D:\anaconda3\envs\schedule_devops\lib\site-packages\django\db\models\fields_init_.py:1367:RuntimeWarning:DateTimeFieldNodeStopRecord.stop_timereceivedanaivedatetime(2024-11-1602:......
  • Let'sGoFurther - Chapter 6: SQL Migrations
      InstallingthemigratetoolTomanageSQLmigrationsinthisprojectwe’regoingtousethemigratecommand-line tool(whichitselfiswritteninGo).OnLinuxandWindows,theeasiestmethodistodownloadapre-builtbinaryandmove ittoalocat......
  • 通过MongoDB Atlas 实现语义搜索与 RAG——迈向AI的搜索机制
    目录通过MongoDBAtlas实现语义搜索与RAG——迈向AI的搜索机制一、引言二、语义搜索与MongoDBAtlas的背景三、MongoDBAtlas的向量搜索功能1.向量搜索的实现方式2.典型操作示例四、RAG在MongoDBAtlas的应用1、RAG是什么2、RAG的实现过程3、RAG的实际应......
  • Hyperf 微服务与 MongoDB 日志记录
    以下是关于在Hyperf微服务中使用MongoDB记录用户操作日志的相关技术详解: 一、Hyperf框架简介Hyperf是基于Swoole协程的高性能PHP微服务框架,它提供了诸多便捷的功能和组件,方便开发者快速构建高效、稳定的微服务应用。在微服务架构中,日志记录是非常重要的一环,有助于排查问题......
  • django 数据库ORM通用的公共函数
    通用查询1、公共函数:defgeneric_query(model,filter_kwargs=None,order_by=None,limit=None,aggregate=None,annotate=None):"""通用的DjangoORM查询函数。:parammodel:Django模型类:paramfilter_kwargs:过滤条件字典:paramorder_by:......