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

JWT权限认证快速入门

一、登录认证

令牌就是一段字符串
承载业务数据, 减少后续请求查询数据库的次数
防篡改, 保证信息的合法性和有效性

二、JWT简介

三、使用JWT

pom.xml引入起步依赖

<!--java jwt坐标--> <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>4.4.0</version> </dependency>

编写工具类JwtUtil

utils/JwtUtil.java

package com.devops.utils; import com.auth0.jwt.JWT; import com.auth0.jwt.algorithms.Algorithm; import java.util.Date; import java.util.Map; public class JwtUtil { private static final String KEY = "devops"; //接收业务数据,生成token并返回 public static String genToken(Map<String, Object> claims) { return JWT.create() .withClaim("claims", claims) .withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 12)) .sign(Algorithm.HMAC256(KEY)); } //接收token,验证token,并返回业务数据 public static Map<String, Object> parseToken(String token) { return JWT.require(Algorithm.HMAC256(KEY)) .build() .verify(token) .getClaim("claims") .asMap(); } }

单元测试类JwtTest

package com.example.demo; import com.auth0.jwt.JWT; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.interfaces.Claim; import com.auth0.jwt.interfaces.DecodedJWT; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import java.util.Date; import java.util.HashMap; import java.util.Map; @SpringBootTest public class JwtTest { // 生成加密后的token @Test public void testGen() { Map<String, Object> claims = new HashMap<>(); claims.put("id", 1); claims.put("username", "张三"); // 生成jwt代码 String token = JWT.create() .withClaim("user", claims) // 添加载荷 .withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 12)) // 设置过期时间 .sign(Algorithm.HMAC256("yange")); // 指定算法,生成密钥 System.out.println(token); } // 验证加密后的token @Test public void testVerify() { String token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7ImlkIjoxLCJ1c2VybmFtZSI6IuW8oOS4iSJ9LCJleHAiOjE3NjczMTg5ODV9.jRY2E19_CC3qKkZl5poHaHInC7CVLf9bc36geEU2S04"; try { DecodedJWT decodedJWT = JWT.require(Algorithm.HMAC256("yange")) .build() .verify(token); Map<String, Claim> claims = decodedJWT.getClaims(); System.out.println(claims.get("user")); } catch (Exception e) { System.out.println("验证失败"); } } }

在项目中可以这样使用:

//使用JwtUtil工具类生成token Map<String, Object> claims = new HashMap<>(); claims.put("id", user.getId()); claims.put("username", username); String token = JwtUtil.genToken(claims); return Result.success(token);

最终的结果:

http://www.gsyq.cn/news/194496.html

相关文章:

  • SQL MIN() 函数详解
  • 探索五相永磁同步电机在Simulink中的PI双闭环SVPWM矢量控制之旅
  • 2026马年新岁:拥抱智能时代,共谱科技华章
  • 2026年最值得学习的十大 SAP 开发技术
  • 电力系统中的三相短路与无穷大功率电源关联分析
  • 永磁同步电机自抗扰控制ADRC的转速稳定
  • 【计算机毕业设计案例】基于YOLOv8的人物目标检测和分割(跟踪)
  • Springboot vue仓库管理系统源码Java 前后端分离 WMS仓库管理 BS
  • 信捷PLC系列:动态分期付款与高级安全解锁机制,保障无限期安全运行至终极解锁
  • Bootstrap v2 教程
  • 如何在React项目中使用Echarts
  • 光伏_混合储能微电网模型 光储微电网模型主要包括发电模块,储能模块,并网模块及控制系统模块
  • JSP Session管理详解
  • 直接上代码!咱们先搞明白怎么用坐标算曼哈顿距离。比如机器人坐标(3,5),任务点(7,2),距离就是|x1-x2|+|y1-y2|=4+3=7
  • 威纶通触摸屏宏指令:简易红绿灯控制程序实战教程
  • 深度学习计算机毕设之基于YOLOv8的人物目标检测和分割(跟踪)
  • 半桥LLC谐振变换器仿真模型,采用变频控制电压闭环控制,完美跟踪给定电压,可实现软开关
  • Numpy 数组操作
  • CST仿真超表面吸波器:全流程编码分束涡旋聚焦极化转换录屏教学
  • 深度学习毕设项目:基于YOLOv8的人物目标检测和分割(跟踪)
  • OpenEnler等Linux系统中安装git工具的方法
  • fast.ai携手AI:对话式工程解锁编程新纪元
  • kotlin协程-热数据通道Channel
  • 手机照片视频太多怎么一键按年月分类整理并批量重命名?照片视频整理神器
  • kotlin协程-冷数据流Flow
  • 医学影像分析中的数据增强具体方法
  • Python 医学影像分析,DICOM读取/分割/可视化全流程
  • 0基础开发学习python工具_____一键打包!用 PyInstaller 将 Python 烟花程序转为 .exe(无需 Python 环境)
  • 深度学习毕设选题推荐:基于YOLOv8的人物目标检测和分割(跟踪)
  • 【Hadoop+Spark+python毕设】起点小说网数据可视化分析系统、计算机毕业设计、包括数据爬取、数据分析、数据可视化、实战教学