go-中间件的使用

news2025/5/18 1:47:12

中间件介绍

  • Gin框架允许开发者在处理请求的过程中加入用户自己的钩子(Hook)函数
  • 这个钩子函数就是中间件,中间件适合处理一些公共的业务逻辑
  • 比如登录认证,权限校验,数据分页,记录日志,耗时统计

1.定义全局中间件

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
)

// 4.定义全局中间件
func MiddleWare() gin.HandlerFunc {
	return func(c *gin.Context) {
		fmt.Println("我是一个全局中间件")
	}
}

func main() {
	// 1.实力化引擎
	r := gin.Default()
	//  全局使用中间件
	r.Use(MiddleWare())
	//  2. 配置路由
	r.GET("/hello", func(c *gin.Context) {
		fmt.Println("执行hello")
		c.JSON(200, gin.H{"msg": "执行成功"})
	})
	//  3. 启动服务
	fmt.Println("服务启动成功:http://127.0.0.1:8080/hello")
	r.Run(":8080")
}

2.定义局部中间件

func main() {
	// 1.实力化引擎
	r := gin.Default()

	//  2. 配置路由
	r.GET("/hello", func(c *gin.Context) {
		fmt.Println("执行hello")
		c.JSON(200, gin.H{"msg": "执行成功"})
	})
		// 局部使用中间件
	r.GET("/hook", MiddleWare(), func(c *gin.Context) {
		fmt.Println("执行hello")
		c.JSON(200, gin.H{"msg": "执行hook成功"})
	})

	//  3. 启动服务
	fmt.Println("服务启动成功:http://127.0.0.1:8080/hello")
	r.Run(":8080")
}

中间件的应用

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
)

// 4.定义全局中间件
func Auth() gin.HandlerFunc {
	return func(c *gin.Context) {
		//  1. 获取token
		token := c.Request.Header.Get("token")
		fmt.Println(token)
		if token != "123456" {
			c.String(403, "token验证失败")
			c.Abort() // 终止请求
			return
		}
		c.Next()
	}
}

func main() {
	// 1.实力化引擎
	r := gin.Default()

	//  2. 配置路由
	r.GET("/index", func(c *gin.Context) {
		c.JSON(200, gin.H{"msg": "index无需登录可以访问"})
	})
	r.GET("/home", Auth(), func(c *gin.Context) {
		c.JSON(200, gin.H{"msg": "home需登录验证才能访问"})
	})

	//  3. 启动服务
	fmt.Println("服务启动成功:http://127.0.0.1:8080/hello")
	r.Run(":8080")
}

token验证失败直接反馈403
在这里插入图片描述
验证成功才能访问
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2378136.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习以任务为中心的潜动作,随地采取行动

25年5月来自香港大学、OpenDriveLab 和智元机器人的论文“Learning to Act Anywhere with Task-centric Latent Actions”。 通用机器人应该在各种环境中高效运行。然而,大多数现有方法严重依赖于扩展动作标注数据来增强其能力。因此,它们通常局限于单一…

15.springboot-控制器处理参数传递

22.springMVC Spring MVC 是非常著名的 Web 应用框架,现在的大多数 Web 项目都采用 Spring MVC。它与 Spring 有着紧 密的关系。是 Spring 框架中的模块,专注 Web 应用,能够使用 Spring 提供的强大功能,IoC , Aop 等等。 Spring…

半成品的开源双系统VLA模型,OpenHelix-发表于2025.5.6

半成品的开源双系统VLA模型,OpenHelix https://openhelix-robot.github.io/ 0. 摘要 随着OpenVLA的开源,VLA如何部署到真实的机器人上获得了越来越多的关注,各界人士也都开始尝试解决OpenVLA的效率问题,双系统方案是其中一个非…

网站推荐(第四期)

好久没有推荐过网站了,重拾推荐一波,最近发现这几个确实不错。 某火箭共享账号 官网:https://id.bocchi.vip/ 苹果用户专用,都是买了某火箭的账号,懂得都懂。 这玩意竟然还是个开源项目,项目地址&#x…

2024 睿抗机器人开发者大赛CAIP-编程技能赛-专科组(国赛)解题报告 | 珂学家

前言 题解 2024 睿抗机器人开发者大赛CAIP-编程技能赛-专科组(国赛),陈越姐姐出题。 国赛比省赛,难度增强了不少,题目就剩下4个题了。 涉及堆栈,hash表,优先队列等高阶数据结构的使用&#x…

git工具使用详细教程-------命令行和TortoiseGit图形化

下载 git下载地址:https://git-scm.com/downloads TortoiseGit(图形化工具)下载地址:https://tortoisegit.org/download/ 认识git结构 工作区:存放代码的地方 暂存区:临时存储,将工作区的代码…

Mysql新增

插入一个记录需要的时间由下列因素组成,其中的数字表示大约比例: 连接:(3)发送查询给服务器:(2)分析查询:(2)插入记录:(1x记录大小)插入索引:(1x索引&#x…

AI Agent开发第64课-DIFY和企业现有系统结合实现高可配置的智能零售AI Agent(上)

开篇 我们之前花了将近10个篇章讲Dify的一些基础应用,包括在讲Dify之前我们讲到了几十个AI Agent的开发例子,我不知道大家发觉了没有,在AI Agent开发过程中我们经常会伴随着这样的一些问题: 需要经常改猫娘;需要经常改调用LLM的参数,甚至在一个流程中有3个节点,每个节点…

【嵌入式】记一次解决VScode+PlatformIO安装卡死的经历

PlatformIO 是开源的物联网开发生态系统。提供跨平台的代码构建器、集成开发环境(IDE),兼容 Arduino,ESP8266和mbed等。 开源库地址:https://github.com/platformio 在 VScode 中配置 PlatformIO 插件,记录…

MySQL 事务(一)

文章目录 CURD不加控制,会有什么问题CURD满足什么属性,能解决上述问题?什么是事务为什么要有事务事务的版本支持了解事务的提交方式 事务常见操作方式研究并发场景事务的正常操作事务的非正常情况的案例结论事务操作的注意事项 CURD不加控制&…

【全解析】EN 18031标准下的 AUM 身份认证机制[下篇]

在上篇文章中,我们详细介绍了EN 18031标准中AUM身份认证机制的AUM - 1、AUM - 2和AUM - 3条款。今天,我们将继续深入探讨AUM - 4到AUM - 6的相关内容,进一步了解该标准如何保障无线电设备的身份认证安全。 一、AUM - 4:更改认证器…

彻底解决sublime text4无法打开install package界面安装插件问题

1. 说明 最新版的 sublime text4,不管是通过软件自带的命令安装的 package control 插件,还是从官网下载的 package control 插件,之后通过 CommandShiftP 打开面板,输入 Package Control,可能找不到 Package Control…

用户现场不支持路由映射,如何快速将安防监控EasyCVR视频汇聚平台映射到公网?

一、方案背景​ 随着数字化安防与智能交通管理发展,视频监控远程管理需求激增。EasyCVR作为专业视频融合平台,具备多协议接入等核心功能,是智能监控的重要工具。但实际部署中,当EasyCVR处于内网且路由器无法进行端口映射时&#…

C#实现访问远程硬盘(附源码)

在现实场景中,我们经常用到远程桌面功能,而在某些场景下,我们需要使用类似的远程硬盘功能,这样能非常方便地操作对方电脑磁盘的目录、以及传送文件。那么,这样的远程硬盘功能要怎么实现了? 这次我们将给出…

图片、音频、视频都能转?简鹿格式工厂了解一下

我们每天都会接触到各种各样的音视频和图片文件。无论是拍摄的照片、录制的视频,还是下载的音频资源,它们往往以不同的格式存在——有些适合分享,有些适合编辑,而有些则仅限特定设备或平台使用。格式不统一的问题,正在…

Qt—用SQLite实现简单的注册登录界面

1.实现目标 本次实现通过SQLite制作一个简易的登录窗口,当点击注册按钮时,登录窗口会消失,会出现一个新的注册界面;完成注册或退出注册时,注册窗口会消失,重新出现登录窗口。注册过的用户信息会出现在SQLi…

MySQL命令行导出数据(docker版本)

MySQL命令行导出数据(docker版本) 1、登录数据库 $mysql -h 10.1.1.143 -u root -p 2、用命令行从MySQL导出数据(无标题) #查看导出时可以存储的路径 mysql> SHOW VARIABLES LIKE secure_file_priv; ----------------------------------------- | Variable_name | Valu…

Python 3.13.3 安装教程

原文来自:Python 3.13.3 安装教程 | w3cschool笔记 (请勿标记为付费!!!) Python 是一种广泛使用的编程语言,广泛应用于 Web 开发、科学计算、数据处理、人工智能等领域。Python 3.13.3 作为 P…

现代化水库运行管理矩阵平台如何建设?

政策背景 2023年8月24日,水利部发布的水利部关于加快构建现代化水库运行管理矩阵的指导意见中指出,在全面推进水库工程标准化管理的基础上,强化数字赋能,加快构建以推进全覆盖、全要素、全天候、全周期“四全”管理,完…

2025程序设计天梯赛补题报告

2025程序设计天梯赛补题报告 仅包含L1 L2 L1-6 这不是字符串题 题目描述 因为每年天梯赛字符串题的解答率都不尽如人意,因此出题组从几年前开始决定:每年的天梯赛的 15 分一定会有一道字符串题,另外一道则一定不是字符串题。 小特现在有…