【踩坑】gin框架middleware中间件如何中途跳出

news2024/11/20 12:44:53

gin框架middleware中间件如何中途跳出

背景

我在是使用gin web框架的时候需要自定义鉴权方式,那当然就要用到middleware这个方式了,代码如下所示,需要判断uid和token是否合法,不合法直接返回401状态,不继续往下执行

    // 设置middleware
	e := gin.New()
	e.Use(gin.Recovery())
	e.Use(utils.UserAuth)
	e.GET("/", func(c *gin.Context) {
		c.JSON(
			http.StatusOK,
			gin.H{
				"code":  http.StatusOK,
				"error": "Welcome server 01",
			},
		)
	})
	// UserAuth 用户鉴权
func UserAuth(c *gin.Context) {
	if GetUidFromCookie(c) == 0 {
		c.JSON(http.StatusUnauthorized, gin.H{"code": 401})
	}
}

问题

不生效,发现响应状态码虽然设置对了,但是这响应体不对啊,怎么不跳出啊
在这里插入图片描述

解决方法

在gin的文档上找了一圈,也没看到相关的信息,还是从stackoverflow找了几篇,才发现需要额外加点代码,正确代码如下

// UserAuth 用户鉴权
func UserAuth(c *gin.Context) {
	if GetUidFromCookie(c) == 0 {
		c.JSON(http.StatusUnauthorized, gin.H{"code": 401})
		c.Abort() // 跳出
		return
	}
	c.Next() // 继续
}

效果图如下
在这里插入图片描述

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

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

相关文章

Android JNI引用类型管理 (十)

🔥 Android Studio 版本 🔥 🔥 JNI三种引用类型 🔥 全局引用、局部引用、弱引用 如果使用得当可以提升程序的性能, 否则会造成程序崩溃或者内存泄漏 🔥 创建包含JNI的类 JNIReference.java 🔥 package com.cmake.ndk1.jni;public class JNIReference {static {S…

什么是分布式微服务?

什么是分布式微服务? 前言什么是微服务举例说明 什么是分布式图解分布式与微服务单体架构及部署微服务架构分布式影响 分布式微服务架构什么是分布式微服务架构面临的问题 前言 本文旨在讲清楚什么是分布式微服务架构,通过解释微服务架构和分布式架构&a…

基于Java+SpringBoot+Vue的乐器社区网站设计与实现

博主介绍:✌擅长Java、微信小程序、Python、Android等,专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟 Java项目精品实战案…

37.SpringBoot实用篇—开发(上册)

目录 一、SpringBoot实用篇—开发。 (1)热部署(开发阶段使用)。 (1.1)手动启动热部署。 (1.2)自动启动热部署。 (1.3)热部署范围配置。 (1.…

概率栅格

欢迎访问我的博客首页。 概率栅格 1. miss 表与 hit 表 1. miss 表与 hit 表 miss 表和 his 表是一维数组,它们存放的都是空闲值,用于更新概率栅格。其下标 i i i 代表旧空闲值,元素 t a b l e [ i ] table[i] table[i] 代表旧空闲值 i i …

openGauss学习笔记-10 openGauss 简单数据管理-创建表

文章目录 openGauss学习笔记-10 openGauss 简单数据管理-创建表10.1 语法格式10.2 参数说明10.3 示例 openGauss学习笔记-10 openGauss 简单数据管理-创建表 在当前数据库中创建一个新的空白表,该表由命令执行者所有。在不同的数据库中可以存放相同的表。您可以使用…

android avd

avd 记录~ avd 创建avd 默认位置安装位置.android/avd 下.android/avd/xxxx.ini 文件.android/avd/.avd 下config.ini 文件 扩展没尝试命令 avd 创建 https://developer.android.google.cn/studio/run/managing-avds?hlzh-cn https://blog.csdn.net/m0_37792384/article/det…

深入分析 workflow 线程池

深入分析 workflow 线程池 线程池是日常开发中很常用的一种管理线程的工具。它是池化技术中的一种。 池化技术的初衷就是将一些资源进行重复利用,来避免重复的构建来提高执行效率。类似的还有数据库连接池,字符串常量池,httpClient 连接池。…

git下载源码及环境搭建下载源码之后端(一)

学习目标: git下载源码 步骤: 下载源码 使用 windows R 使用cmd调用命令框下载gitee云上面的 源码文件 输入命令: Git clone (此处拼接gitee源代码 地址) 若使用 git 命令 clone 项目时 我们需要在系统变量中进行…

Ceph 存储(最详细!)

目录 一:存储基础 1、单机存储设备 (1)DAS(直接附加存储,是直接接到计算机的主板总线上去的存储) (2)NAS(网络附加存储,是通过网络附加到当前主机文件系统…

CSS 伪元素: ::marker 自定义列表序号

::marker 伪元素 ::marker&#xff0c;可作用在任何设置了 display: list-item 的元素或伪元素上&#xff0c;例如<li>和<summary>。 /** <ul><li>Peaches</li><li>Apples</li><li>Plums</li> </ul> */ ul li::…

Python教程(3)——python开发工具vscode的下载与安装

Python的开发工具有很多款&#xff0c;很多都是非常好用的&#xff0c;其中vscode作为其中一款Python的开发工具&#xff0c;是非常轻量级的&#xff0c;今天我们来介绍一下vs code的下载与安装。 vscode的下载与安装 首先需要到vscode的官网&#xff0c;这个谷歌或者百度一下…

【C++11】包装器 和 bind函数 的定义与 使用

包装器 在C11标准中&#xff0c;没有提供内置的包装器功能&#xff0c;但我们可以使用一些技术手段来实现包装器的效果。下面介绍两种常用的方法&#xff1a; 函数对象包装器 函数对象包装器&#xff08;Function Object Wrapper&#xff09;&#xff1a; C11引入了 std::fu…

CCLINK IE 转MODBUS-RTU网关modbusrtu地址对照表

远创智控YC-CCLKIE-RTU。这款产品的主要功能是将各种MODBUS-RTU、RS485、RS232设备接入到CCLINK IE FIELD BASIC网络中。 那么&#xff0c;这款通讯网关又有哪些特点呢&#xff1f;首先&#xff0c;它能够连接到CCLINK IE FIELD BASIC总线中作为从站使用&#xff0c;同时也能连…

晶体三极管总结

目录 1.3.1晶体管的结构与类型 1.3.2晶体管的电流放大作用 1.3.3晶体管的共射特性曲线 晶体三极管中有两种带有不同的极性电荷的载流子参与导电&#xff0c;故称之为双极型晶体管&#xff08;BJT&#xff09;Bipolar Junction Transistor 1.3.1晶体管的结构与类型 晶体三极…

PowerShell设置最美界面

在 Windows 上安装 scoop&#xff1a; scoop是什么 windows下的安装源搜索工具&#xff0c;有点类似centos下的yum和Ubuntu下的apt。用这个拉下来安装的软件没有广告。 scoop官方网址&#xff1a; https://scoop.sh/A command-line installer for Windowshttps://scoop.sh/ …

scratch二级、三级常考大题

目录 1. 绘制多彩五角星 2. 躲避陨石 3. 数星星 4. 古堡历险记 5. 五彩糖葫芦 6. 疫情隔离和核酸检测模拟 7. 画正方形 8.大鱼吃小鱼 9. 接水果 10. 绘制正方形 1. 绘制多彩五角星 1.准备工作 &#xff08;1&#xff09;选择背景stars、角色Pencil&#xff1b; &am…

工作日志3 对类型的判断 slice的截取对于jq的使用 el-table的表头和内容的位置

在 JavaScript 中&#xff0c;你可以使用多种方式来判断某个值是否为空。以下是几种常见的方法&#xff1a; 使用严格相等运算符 () 检查值是否为 null 或 undefined&#xff1a; var value null; // 或者 undefinedif (value null || value undefined) {// 值为空 }使用逻…

Linux常用命令——elm命令

在线Linux命令查询工具 elm 纯文本邮件客户端程序 补充说明 elm命令是一个E-mail客户端管理程序&#xff0c;它提供了纯文本交互式全屏幕界面。 语法 elm(选项)选项 -s<邮件主题>&#xff1a;指定新邮件的邮件主题&#xff1b; -f<目录>&#xff1a;开启程序…

Flutter 使用JSONToDart 生成bean文件

1. 首先安装插件&#xff0c;进入flile-setting-plugins 2.然后搜索安装jsontodart&#xff0c;之后重启ide使其生效 3.在你需要使用的地方直接鼠标右键 或者使用快捷键AltShiftD 4.然后会出现这样一个弹窗&#xff0c;输入你要用到的json数据&#xff0c;和文件名称点击生成就…