当前位置: 首页 > news >正文

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 调试结果

在这里插入图片描述

在这里插入图片描述

相关文章:

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

1.下载jwt go get -u github.com/dgrijalva/jwt-go2.新建生成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 jwtC…...

数据治理、数据素养和数据质量管理:文献综述

注意:这并不是正式发表的论文,只是一篇用来交作业的文章 摘要 随着数据时代的到来,数据治理、数据素养和数据质量管理成为组织数据管理中的三大核心概念。本文基于相关研究与实践,对这三个领域进行全面综述,探讨它…...

【Linux】用户和用户组管理

管理用户 1.添加用户账号——useradd命令 【实例2-1-1】 按系统默认配置添加指定用户账号st和stu。 # 添加用户账号st [rootlocalhost ~]# useradd st # 添加用户账号stu [rootlocalhost ~]# useradd stu【实例2-1-2】添加用户账号stu01,UID为1004&am…...

游戏引擎学习第16天

视频参考:https://www.bilibili.com/video/BV1mEUCY8EiC/ 这些字幕讨论了编译器警告的概念以及如何在编译过程中启用和处理警告。以下是字幕的内容摘要: 警告的定义:警告是编译器用来告诉你某些地方可能存在问题,尽管编译器不强制要求你修复…...

如何通过对敏捷实践的调整,帮助远程团队提升研发效能?

首先明确一点,最敏捷的做法就是不要远程团队或分布式团队,远程一定比不上面对面同一地点的模式,毕竟环境不同,就不要期望远程团队和本地团队具备相同的效能,甚至期望更高。 那么,无论何种原因,…...

Ubuntu Linux使用前准备动作 配置SSH

在 Ubuntu 系统中配置 SSH 服务可以通过以下步骤进行: 1、安装ssh服务 1)打开终端(可以使用快捷键 Ctrl Alt T)。 2)运行以下命令安装 OpenSSH 服务器: sudo apt-get update:这一步是更新…...

疫情下的图书馆管理系统:Spring Boot技术

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了疫情下图书馆管理系统的开发全过程。通过分析疫情下图书馆管理系统管理的不足,创建了一个计算机管理疫情下图书馆管理系统的方案。文章介绍了疫情下图…...

vue3完整安装并创建项目

1、下载:https://npmmirror.com/mirrors/node/v18.19.0/node-v18.19.0-x64.msi 2、验证Nodejs是否安装成功(管理员身份运行cmd) node -v #查看nodejs的版本 v18.19.0npm -v #查看npm的版本 10.2.3 3、在D:\Program Files\nodejs路径下创建两…...

【Linux】Linux入门实操——进程管理(重点)

1. 概述 在 LINUX 中,每个执行的程序都称为一个进程。每一个进程都分配一个ID号(pid,进程号)。>windows > linux每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作&#xff0…...

Linux-Apache

文章目录 Apache基础配置 🏡作者主页:点击! 🤖Linux专栏:点击! ⏰️创作时间:2024年11月19日12点20分 Apache Web服务器用来实现HTTP和相关TCP连接的处理,同时负责所提供资源的管理…...

高危,Laravel参数注入漏洞安全风险通告

今日,亚信安全CERT监控到安全社区研究人员发布安全通告,披露了Laravel 参数注入漏洞(CVE-2024-52301)。在受影响的版本中,Application.php 文件的 detectEnvironment 函数直接使用了 $_SERVER[argv],但没有检查运行环境是否为 CLI…...

【Qt】使用QString的toLocal8Bit()导致的问题

问题 使用Qt发送一个Http post请求的时候,服务一直返回错误和失败信息。同样的url以及post参数,复制黏贴到postman里就可以发送成功。就感觉很神奇。 原因 最后排查出原因是因为参数中含有汉字而导致的编码问题。 在拼接post参数时,使用了…...

Android上运行Opencv(TODO)

在高通安卓平台上,确实可以通过 NDK 使用 OpenCV 并访问摄像头。NDK 提供了更高性能的计算能力,特别是在图像处理和计算密集型任务中,与 OpenCV 结合可以充分利用高通平台的硬件资源(如 NEON SIMD 指令集和 GPU 加速)。…...

动态IP黑白名单过滤的设计与实现(上篇设计思想)

文章目录 需求分析方案设计1、设计过程2、最终方案3、扩展知识 - 布隆过滤器 需求分析 一些恶意用户(可能是黑客、爬虫、DDoS 攻击者)可能频繁请求服务器资源,导致资源占用过高。因此我们需要一定的手段实时阻止可疑或恶意的用户&#xff0c…...

LeetCode 力扣 热题 100道(五)最长回文子串(C++)

最长回文子串 给你一个字符串 s,找到 s 中最长的 回文子串。 回文性 如果字符串向前和向后读都相同,则它满足 回文性 子字符串子字符串 是字符串中连续的 非空 字符序列。 动态规划法 class Solution { public:string longestPalindrome(string s) {i…...

Docker--Docker Registry(镜像仓库)

什么是Docker Registry? 镜像仓库(Docker Registry)是Docker生态系统中用于存储、管理和分发Docker镜像的关键组件。 镜像仓库主要负责存储Docker镜像,这些镜像包含了应用程序及其相关的依赖项和配置,是构建和运行Doc…...

maven手动上传jar到私服仓库:mvn deploy:deploy-file命令

一、场景 现需要将公司内部的jar包上传到私服仓库,供其他同事使用,此时就需要用到mvn deploy:deploy-file命令。 二、 mvn deploy:deploy-file命令 举个栗子: mvn deploy:deploy-file -DgroupIdorg.pttsql -DartifactIdpttsql -Dversi…...

【机器学习】机器学习中用到的高等数学知识-1.线性代数 (Linear Algebra)

向量(Vector)和矩阵(Matrix):用于表示数据集(Dataset)和特征(Feature)。矩阵运算:加法、乘法和逆矩阵(Inverse Matrix)等,用于计算模型参数。特征值(Eigenvalues)和特征向量(Eigenvectors)&…...

无插件H5播放器EasyPlayer.js网页web无插件播放器选择全屏时,视频区域并没有全屏问题的解决方案

EasyPlayer.js H5播放器,是一款能够同时支持HTTP、HTTP-FLV、HLS(m3u8)、WS、WEBRTC、FMP4视频直播与视频点播等多种协议,支持H.264、H.265、AAC、G711A、MP3等多种音视频编码格式,支持MSE、WASM、WebCodec等多种解码方…...

Idea中创建和联系MySQL等数据库

备注:电脑中要已下好自己需要的MySQL数据库软件 MySQL社区版下载链接: https://dev.mysql.com/downloads/installer/ 优点: 1.相比与在命令行中管理数据库,idea提供了图形化管理,简单明了; 2.便于与后端…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

EtherNet/IP转DeviceNet协议网关详解

一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...