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

Springboot使用jwt实现登录认证

文章目录

  • 一、登录认证
  • 二、JWT简介
  • 三、使用JWT
    • pom.xml引入起步依赖
    • 编写工具类JwtUtil
    • 单元测试类JwtTest
    • 使用
    • 效果
  • 四、参考资料


一、登录认证

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

二、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 org.example;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@Testpublic 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("itheima"));    // 指定算法,生成密钥System.out.println(token);}// 验证加密后的token@Testpublic void testVerify() {String token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9" +".eyJ1c2VyIjp7ImlkIjoxLCJ1c2VybmFtZSI6IuW8oOS4iSJ9LCJleHAiOjE3NDU2ODE2ODd9" +".IJ8x-hbz5b9kvdu2rah-iI0rQ8CuD4FYxA4OWdqUaNI";try {DecodedJWT decodedJWT =JWT.require(Algorithm.HMAC256("itheima")).build().verify(token);Map<String, Claim> claims = decodedJWT.getClaims();System.out.println(claims.get("user"));} catch (Exception e) {System.out.println("验证失败");}}
}

使用

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

效果

在这里插入图片描述

四、参考资料

https://www.bilibili.com/video/BV14z4y1N7pg?spm_id_from=333.788.player.switch&vd_source=0467ab39cc5ec5940fee22a0e7797575&p=19

http://www.xdnf.cn/news/217909.html

相关文章:

  • Gitea windows服务注册,服务启动、停止、重启脚本
  • JavaScript面试问题
  • 研读论文——电子科技大学《通过专家混合实现多类型上下文感知的对话推荐系统》
  • antd-vue表单实现一个临时校验效果
  • DeepSeek+Dify之六通过API调用工作流
  • 头歌java课程实验(Java中的IO流操作)
  • python脚本下载ERA5数据详细规范和教程
  • Mysql中索引的知识
  • c#栈及其应用
  • 生物信息学常用软件InSequence,3大核心功能,简易好上手
  • PyTorch 深度学习实战(23):多任务强化学习(Multi-Task RL)之扩展
  • Redis Sentinel 和 Redis Cluster 各自的原理、优缺点及适用场景是什么?
  • pStubMsg--MemorySize0x74字节是如何分配的之rpcrt4!NdrAllocate函数分析
  • 项目三 - 任务1:采用面向对象方式求三角形面积
  • 大模型落地难题:如何用LoRA低成本微调企业私有模型?
  • 信道估计--最小均方误差(MMSE)
  • 解锁植被参数反演密码:AI 与 Python 的融合之道
  • 深入理解过拟合:机器学习中的常见陷阱
  • 软考高项(信息系统项目管理师)第 4 版全章节核心考点解析(力扬老师课程精华版)
  • qtfaststart使用教程(moov置前)
  • CC52.【C++ Cont】滑动窗口
  • Arthas在Java程序监控和分析中的应用
  • ChatDLM Technical Report 介绍与分析
  • oracle怎样通过固化较优执行计划来优化慢sql
  • 信息学奥赛一本通 1454:山峰和山谷
  • < 自用文 rclone > 在 Ubuntu 24 访问 Google Drive 网络内容
  • 双剑合璧:融合视觉基础与语言模型,勇闯未知领域的语义分割新框架
  • Linux开发中的线程管理(C++11 std::thread)
  • Pytorch 反向传播
  • 塔能照明节能服务流程:精准驱动工厂能耗优化