Golang语言整合jwt+gin框架实现token

1.下载jwt

 go get -u  github.com/dgrijalva/jwt-go

2.新建生成token和解析token文件

2.1 新建common文件夹和jwtConfig文件夹 新建jwtconfig.go文件
在这里插入图片描述

2.2 jwtconfig.go文件代码

/*
@Time : 2021/8/2 下午3:03
@Author : mrxuexi
@File : main
@Software: GoLand
*/
package jwtConfig
import ("github.com/dgrijalva/jwt-go""time"
)type Claims struct {UserID int `json:"userId"`jwt.StandardClaims
}const expire_time = 30 * time.Minute
var jwtSecret = []byte("123")
// GenerateToken 生成token的函数
func GenerateToken(userId int) (string, error) {nowTime := time.Now()expireTime := nowTime.Add(expire_time)claims := Claims{userId, // 自行添加的信息jwt.StandardClaims{ExpiresAt: expireTime.Unix(), // 设置token过期时间Issuer:    "admin",           // 设置jwt签发者},}// 生成tokentokenClaims := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)token, err := tokenClaims.SignedString(jwtSecret)return token, err
}// ParseToken 验证token的函数
func ParseToken(token string) (*Claims, error) {// 对token的密钥进行验证tokenClaims, err := jwt.ParseWithClaims(token, &Claims{}, func(token *jwt.Token) (interface{}, error) {return jwtSecret, nil})// 判断token是否过期if tokenClaims != nil {claims, _ := tokenClaims.Claims.(*Claims)return claims, nil}return nil, err
}

3.中间件封装文件

3.1 新建middleware文件夹和jwt.go文件
在这里插入图片描述

3.2 jwt.go文件代码

下图红色正方形框地址根据自己的项目定义
在这里插入图片描述

package middleware
import ("github.com/gin-gonic/gin""ListProject-ver1.0/common/jwtConfig""net/http""time"
)func JWT() gin.HandlerFunc {return func(context *gin.Context) {// 获取tokentoken := context.GetHeader("Token")if token == "" {context.JSON(http.StatusOK, gin.H{"code": http.StatusUnauthorized,"msg":  "没有携带token","data": "",})context.Abort()return} else {claims, err := jwtConfig.ParseToken(token)if err != nil {context.JSON(http.StatusOK, gin.H{"code": http.StatusUnauthorized,"msg":  "token验证失败","data": "",})context.Abort()return} else if time.Now().Unix() > claims.StandardClaims.ExpiresAt {context.JSON(http.StatusOK, gin.H{"code": http.StatusUnauthorized,"msg":  "token已过期","data": "",})context.Abort()return}}}
}

4.调用测试中间件jwt功能

4.1 调用测试文件

在这里插入图片描述

4.2 代码

代码里面的ListProject-ver1.0/middleware这块也根据自己的项目引用

/*
@Time : 2021/8/2 下午3:03
@Author : mrxuexi
@File : main
@Software: GoLand
*/
package main
import ("github.com/gin-gonic/gin""ListProject-ver1.0/middleware"
)func main() {r := gin.Default()//注册组和中间件v1 := r.Group("/user"){v1.GET("/notoken",func(context *gin.Context) {context.String(http.StatusOK, "hello gin post method")})}//使用jwt中间件v2 := r.Group("/user2").Use(middleware.JWT()){v2.GET("/needtoken", func(context *gin.Context) {context.String(http.StatusOK, "hello gin post method")})}r.Run(":8888")
}

4.3 调试结果

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

Spring Security SecurityContextHolder组件

在本篇博客中,我们将讨论 Spring Security 的 SecurityContextHolder 组件,包括其实现方式、关键特性,并通过实际示例进行说明。 理解 SecurityContextHolder SecurityContextHolder 是 Spring Security 存储当前安全上下文详细信息的地方。…

详细分析ipvsadm负载均衡的命令

目录 前言1. 基本知识2. 命令参数3. 拓展 前言 LVS四层负载均衡架构详解Lvs推荐阅读:添加链接描述 1. 基本知识 ipvsadm 是用于管理和配置 Linux 服务器上 IP Virtual Server (IPVS) 的工具,是 Linux 提供的一个负载均衡模块,支持多种负载…

量化选股日常操作日记-11-ai眼镜-润欣科技

用 微信小程序 梦想兔企业智能风险分析助手 ,选择AI眼镜板块,挖掘了几个合适的股,分析下来感觉 润欣科技 比较安全些适合观察,几块到十几块波动,企业基本面也没有特别大问题。就是现在价位在周期波动高位,下…

云安全之法律和合规

0x00 前言 本文主要内容是从法律,合同,电子举证,以及合规和审计这五个部分来记录一下相关的云安全内容 0x01 法律 受法律约束的影响因素 云服务所在的地区云用户所在的区域数据主体所在的区域 GDPR:通用数据保护法案&#xf…

动力学法测量金属弹性模量

🏫中南民族大学-⚛大学物理实验2-📠通信工程2024 目录 Python代码 1. 绘制图像 2. 弹性模量数值计算 图像显示 Pycharm 豆包 MarsCode 非常强大!有了它们,我在处理大学物理实验的数据及其可视化就非常方便,极大缩减…

鸿蒙的数据存储API存储和读

数据处理: 使用鸿蒙的数据存储API存储和读 随着智能设备的日益普及,高效、安全地管理设备上的数据成为开发者的首要任务。鸿蒙操作系统(HarmonyOS)作为一款面向未来的全场景分布式操作系统,提供了丰富的API支持,其中数…

NLP论文速读(EMNLP 2024)|动态奖励与提示优化来帮助语言模型的进行自我对齐

论文速读|Dynamic Rewarding with Prompt Optimization Enables Tuning-free Self-Alignment of Language Models 论文信息: 简介: 本文讨论的背景是大型语言模型(LLMs)的自我对齐问题。传统的LLMs对齐方法依赖于昂贵的训练和人类偏好注释&am…

计算机中的网络安全

在本篇中介绍了以下几个方面: 机密性 密码学 对称加密算法(DES, 3DES, AES) 公开秘钥算法 RSA大素数的获取 完整性 散列函数(MD5, SHA-1, 并没有提及算法实现) 报文鉴别(MAC) 数字签名 端点鉴别 应用 SSL(TCP网络安全) 运行时安全 防火墙的基本知识 主要体现在以下几个方…

SLM561A系列60V10-50mA单通道线性恒流LED驱动芯片,为汽车照明、景观照明助力

SLM561A系列选型参考: SLM561A10ae-7G SOD123 SLM561A15ae-7G SOD123 SLM561A20ae-7G SOD123 SLM561A25ae-7G SOD123 SLM561A30ae-7G SOD123 SLM561A35ae-7G SOD123 SLM561A40ae-7G SOD123 SLM561A45ae-7G SOD123 SLM561A50ae-7G SOD123 S…

golang操作mysql基础驱动github.com/go-sql-driver/mysql使用

golang中类似java操作mysql的jdbc一样,github.com/go-sql-driver/mysql也为go提供了基础接口,在开发中往往需要写更多的代码来满足自己的定制需求,java在驱动基础上有了扩展,orm框架诞生,mybatis、jpa等都是好用的扩展…

RabbitMQ1:初识MQ

欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…

父组件提交时让各自的子组件验证表格是否填写完整

项目场景: 提示:这里简述项目相关背景: 父组件中有三个表格,表格中时输入框,有些输入框是必填的,在父组件提交时需要验证这三个表格的必填输入框中是否有没填写的。 原因分析: 提示&#xff1a…

Siglus引擎 Unpack | 未完待续

前言 未完待续。 代码在这里:https://github.com/N0zoM1z0/SiglusEngine-Extract 以后随时会更新。() 因为我是选择直接逆向游戏引擎,在无源码,不hook的情况下硬逆Siglus…… 路漫漫。。。 read.sav 可以直接逆Sigl…

黑马嵌入式开发入门模电基础学习笔记

学习视频: 黑马程序员嵌入式开发入门模电(模拟电路)基础 文章目录 背景介绍电流电压组件仿真三极管ne555PCBEDA案例:非接触式电笔案例:电子琴 背景介绍 电流 电压 组件 仿真 三极管 mos管 ne555 PCB EDA 案例:非接触…

centos7安装Chrome使用selenium-wire

背景:在centos7中运行selenium-wire爬虫,系统自带的Firefox浏览器不兼容,运行报错no attribute ‘set_preference’,应该是selenium-wire和Firefox的驱动不兼容 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上…

C++设计模式:抽象工厂模式(风格切换案例)

抽象工厂模式(Abstract Factory)是一种创建型设计模式,其核心思想是:为一组相关或相互依赖的对象提供一个创建接口,而无需指定它们具体的类。简单来说,就是一个工厂可以生产一系列相关的对象。 我们接下来…

Oracle数据库安全扫描1158/3938端口出现弱SSL加密算法解决方法之一

问题复述 某国企项目现场反应安全扫描出部署某历史项目的Windows服务器上的1158及3938两个端口出现了弱SSL加密算法漏洞,要求整改。 经过核实,该Windows服务器上部署了tomcat与Oracle 11g数据库,其中1158和3938两个端口均为Oracle数据库所使…

linux 中mysql查看慢日志

1、到mysql容器,先登录到数据库,查看是否开启 mysql -h 127.0.0.1 -uroot -p SHOW VARIABLES LIKE slow_query_log; 2、如果没有开启,需要先开启 set global slow_query_log ON; 3、查看慢日志文件 SHOW VARIABLES LIKE slow_query_log…

从0开始机器学习--Day30--异常检测算法

异常检测算法(Anomaly detection algorithm) 我们定义异常检测算法的输出,也写作,这里的每一项括号内代表的是每个特征都符合各自的高斯分布(也就是正态分布),代表均值,决定了模型的中心位置;代…

[数组二分查找] 0209. 长度最小的子数组

文章目录 1. 题目链接2. 题目大意3. 示例4. 解题思路5. 参考代码 1. 题目链接 209. 长度最小的子数组 - 力扣(LeetCode) 2. 题目大意 描述:给定一个只包含正整数的数组 nums 和一个正整数 target。 要求:找出数组中满足和大于等…