当前位置: 首页 > 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.jsqmd.com/news/178287/

相关文章:

  • 探索五相永磁同步电机在Simulink中的PI双闭环SVPWM矢量控制之旅
  • SQL MIN() 函数详解
  • 2025必备!专科生毕业论文写作TOP10 AI论文写作软件测评
  • 从对抗到合作:重建亲子沟通的底层逻辑
  • 2026马年新岁:拥抱智能时代,共谱科技华章
  • 当我的AI“学会”了与我交谈,我才明白声网与OpenAI合作的真正含义
  • PHP Cookie
  • 第01课: 初识Python
  • COMSOL气体放电仿真模型(流注放电)及其与正极性棒——板电极模型相结合的模拟研究:空气中流...
  • 2026年最值得学习的十大 SAP 开发技术
  • 【数字信号去噪】鳄鱼伏击算法优化变分模态分解CAOA-VMD数字信号去噪(优化K值 alpha值 综合指标 适应度函数包络熵)【含Matlab源码 14792期】
  • 电力系统中的三相短路与无穷大功率电源关联分析
  • 告别触摸屏宏!PLC配方功能块实战指南
  • 进程资源全解析:从CPU到IPC
  • 导师推荐!9款AI论文写作软件测评:本科生毕业论文必备
  • 永磁同步电机自抗扰控制ADRC的转速稳定
  • 【计算机毕业设计案例】基于YOLOv8的人物目标检测和分割(跟踪)
  • union type data在vivado hls中的作用
  • 深度学习毕设项目:基于随机森林的贷款可能性预测系统实现
  • Springboot vue仓库管理系统源码Java 前后端分离 WMS仓库管理 BS
  • 这个DBSCAN案例实现得挺有意思。咱们直接上代码,边看边聊。首先得准备点测试数据,用三维正态分布随机数生成三个簇
  • Bootstrap v2 教程
  • 66-计及调峰主动性的风光水火储多能系统分层优化调度策略
  • 信捷PLC系列:动态分期付款与高级安全解锁机制,保障无限期安全运行至终极解锁
  • 【计算机毕业设计案例】基于随机森林的贷款可能性预测系统实现
  • 光伏_混合储能微电网模型 光储微电网模型主要包括发电模块,储能模块,并网模块及控制系统模块
  • JSP Session管理详解
  • Java是当今最优雅的开发语言
  • 如何在React项目中使用Echarts
  • 构建电气距离邻接矩阵