JWT生成、解析token

2024-09-06 21:04
文章标签 生成 解析 token jwt

本文主要是介绍JWT生成、解析token,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 1. 导入JWT相关依赖
  • 2. JWT生成token
  • 3. JWT解析token
  • 4. 测试结果
  • 5. JWT加密、解密工具类

1. 导入JWT相关依赖

<!--      jwt认证模块--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.10.2</version></dependency>
<!--      jwt api impl实现--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-impl</artifactId><version>0.10.2</version></dependency>
<!--      jwt json--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-jackson</artifactId><version>0.10.2</version></dependency>

2. JWT生成token

在这里插入图片描述

    /*** 获取JWT令牌* @return*/public static String getToken(String key){Map headers = new HashMap();//设置签名算法headers.put("alg", "HS256");//设置令牌类型headers.put("typ", "JWT");Map<String, Object> claims = new HashMap<>();//设置令牌主题claims.put("sub", "1234567890");//设置令牌其他信息claims.put("name", "John Doe");claims.put("admin", true);//生成令牌String jwt = Jwts.builder()//设置头信息.setHeaderParams(headers)//设置负载信息.setClaims(claims)//使用HS256算法和密钥对JWT进行签名.signWith(SignatureAlgorithm.HS256,key)//将之前设置的头部信息、负载信息和签名信息组合成一个完整的JWT,并以字符串形式返回.compact();System.out.println(jwt);return jwt;}

3. JWT解析token

    /*** 解析JWT令牌* @param token* @param key*/public static void parseToken(String token,String key){try{System.out.println("开始解析令牌...");Claims claims = Jwts.parser()//创建一个解析器.setSigningKey(key)//设置验证签名的密钥.parseClaimsJws(token)//传入需要进行解析的token并解析.getBody();//从Jws<Claims>对象中获取负载信息System.out.println(claims);}catch (Exception e){e.printStackTrace();}}

4. 测试结果

    public static void main(String[] args) {String key = "3f2e1d4c5b6a79808f7e6d5c4b3a29181716151413121110";String token = getToken(key);parseToken(token,key);}

      输出结果:

在这里插入图片描述

5. JWT加密、解密工具类

/*** 提供Jwt工具类* 提供Token生成和验证方法* @author Huan*/
@Component //托管spring容器
public class JwtUtil {// 密钥private static final String key = "3f2e1d4c5b6a79808f7e6d5c4b3a29181716151413121110";/*** 生成JWT令牌* @param payload* @return*/public String getToken(Map payload){//设置头部信息Map headers = new HashMap();//设置签名算法headers.put("alg", "HS256");//设置令牌类型headers.put("typ", "JWT");//生成令牌String jwt = Jwts.builder()//设置头信息.setHeaderParams(headers)//设置负载信息.setClaims(payload)//使用HS256算法和密钥对JWT进行签名.signWith(SignatureAlgorithm.HS256,key)//将之前设置的头部信息、负载信息和签名信息组合成一个完整的JWT,并以字符串形式返回.compact();System.out.println(jwt);return jwt;}/*** 解析JWT令牌* @param token* @return*/public Claims parseToken(String token){try{System.out.println("开始解析令牌...");Claims claims = Jwts.parser()//创建一个解析器.setSigningKey(key)//设置验证签名的密钥.parseClaimsJws(token)//传入需要进行解析的token并解析.getBody();//从Jws<Claims>对象中获取负载信息System.out.println(claims);return claims;}catch (Exception e){e.printStackTrace();}return null;}
}

链接:

JWT官方地址: https://jwt.io/

JWT官方文档: https://github.com/jwtk/jjwt

JWT官方文档快速开始: https://github.com/jwtk/jjwt?tab=readme-ov-file#quickstart

这篇关于JWT生成、解析token的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1143112

相关文章

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

一文解析C#中的StringSplitOptions枚举

《一文解析C#中的StringSplitOptions枚举》StringSplitOptions是C#中的一个枚举类型,用于控制string.Split()方法分割字符串时的行为,核心作用是处理分割后... 目录C#的StringSplitOptions枚举1.StringSplitOptions枚举的常用

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

MyBatis延迟加载与多级缓存全解析

《MyBatis延迟加载与多级缓存全解析》文章介绍MyBatis的延迟加载与多级缓存机制,延迟加载按需加载关联数据提升性能,一级缓存会话级默认开启,二级缓存工厂级支持跨会话共享,增删改操作会清空对应缓... 目录MyBATis延迟加载策略一对多示例一对多示例MyBatis框架的缓存一级缓存二级缓存MyBat

前端缓存策略的自解方案全解析

《前端缓存策略的自解方案全解析》缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,:本文主要介绍前端缓存的自解方案,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、为什么“清缓存”成了技术圈的梗二、先给缓存“把个脉”:浏览器到底缓存了谁?三、设计思路:把“发版”做成“自愈”四、代码

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS