jjwt使用制作token,解析token异常提醒

2024-03-01 18:28

本文主要是介绍jjwt使用制作token,解析token异常提醒,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

<!-- jwt -->
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>${jjwt.version}</version>
</dependency>
<jjwt.version>0.9.1</jjwt.version>

yml配置文件

# JWT配置
jwt:# 密匙Keytoken-secret: WangKun# HeaderKeytoken-header-key: Authorization# Token前缀token-prefix: WangKun# 过期时间,单位秒token-expiration: 864000

获取token信息

/*** @Description JWT令牌信息* @Author WangKun* @Date 2024/1/30 18:24* @Version*/
@Data
@Component
public class JwtInfoConfig {/*** token响应头Key*/public static String tokenHeaderKey;/*** token前缀*/public static String tokenPrefix;/*** token秘钥*/public static String tokenSecret;/*** token过期时间*/public static Long tokenExpiration;@Value("${jwt.token-header-key}")public void setTokenHeaderKey(String tokenHeaderKey) {JwtInfoConfig.tokenHeaderKey = tokenHeaderKey;}@Value("${jwt.token-prefix}")public void setTokenPrefix(String tokenPrefix) {JwtInfoConfig.tokenPrefix = tokenPrefix;}@Value("${jwt.token-secret}")public void setTokenSecret(String tokenSecret) {JwtInfoConfig.tokenSecret = tokenSecret;}@Value("${jwt.token-expiration}")public void setTokenExpiration(Long tokenExpiration) {JwtInfoConfig.tokenExpiration = tokenExpiration;}
}

制作token

/*** @Description Token令牌工具* @Author WangKun* @Date 2024/2/1 15:33* @Version*/
@Slf4j
public class TokenUtil {/*** @param username   用户名* @param claimKey   有效负荷key(不加密,不要放隐私内容)* @param claimValue 有效负荷value* @Description 生成令牌* @Throws* @Return java.lang.String* @Date 2024-02-01 16:10:49* @Author WangKun*/public static String creatToken(String username, String claimKey, Object claimValue) {//有效负荷Claims claim = Jwts.claims();claim.put(claimKey, claimValue);//设置token响应头return Jwts.builder()//设置有效负荷.setClaims(claim)//设置用户名.setSubject(username)//设置token过期时间.setExpiration(new Date(System.currentTimeMillis() + JwtInfoConfig.tokenExpiration))//设置token签名算法及秘钥.signWith(SignatureAlgorithm.HS512, JwtInfoConfig.tokenSecret).compact();}/*** @param username* @Description 生成令牌,无有效负荷* @Throws* @Return java.lang.String* @Date 2024-02-01 18:21:53* @Author WangKun*/public static String creatToken(String username) {//设置token响应头return Jwts.builder()//设置用户名.setSubject(username)//设置token过期时间.setExpiration(new Date(System.currentTimeMillis() + JwtInfoConfig.tokenExpiration))//设置token签名算法及秘钥.signWith(SignatureAlgorithm.HS512, JwtInfoConfig.tokenSecret).compact();}/*** @param token* @Description 解析令牌* @Throws* @Return com.alibaba.fastjson2.JSONObject* @Date 2024-02-01 17:47:15* @Author WangKun*/public static JSONObject analyzeToken(String token) {Claims claims;try {// 解析tokenclaims = Jwts.parser().setSigningKey(JwtInfoConfig.tokenSecret).parseClaimsJws(token.replace(JwtInfoConfig.tokenPrefix + ".", "")).getBody();return new JSONObject(new HashMap<>(claims));} catch (ExpiredJwtException e) {log.error("令牌过期:{},{}", e, e.getMessage());throw new RuntimeException(String.valueOf(ResultCode.TOKEN_EXPIRED));} catch (UnsupportedJwtException e) {log.error("无效的令牌:{},{}", e, e.getMessage());throw new RuntimeException(String.valueOf(ResultCode.TOKEN_INVALID));} catch (MalformedJwtException e) {log.error("令牌格式错误:{},{}", e, e.getMessage());throw new RuntimeException(String.valueOf(ResultCode.TOKEN_FORMAT_ERROR));} catch (SignatureException e) {log.error("令牌签名错误:{},{}", e, e.getMessage());throw new RuntimeException(String.valueOf(ResultCode.TOKEN_SIGNATURE_ERROR));} catch (IllegalArgumentException e) {log.error("非法令牌:{},{}", e, e.getMessage());throw new RuntimeException(String.valueOf(ResultCode.TOKEN_ILLEGALITY));} catch (Exception e) {log.error("令牌解析错误:{},{}", e, e.getMessage());throw new RuntimeException(String.valueOf(ResultCode.TOKEN_ANALYZE_ERROR));}}

这篇关于jjwt使用制作token,解析token异常提醒的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python ORM神器之SQLAlchemy基本使用完全指南

《PythonORM神器之SQLAlchemy基本使用完全指南》SQLAlchemy是Python主流ORM框架,通过对象化方式简化数据库操作,支持多数据库,提供引擎、会话、模型等核心组件,实现事务... 目录一、什么是SQLAlchemy?二、安装SQLAlchemy三、核心概念1. Engine(引擎)

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

Java 正则表达式的使用实战案例

《Java正则表达式的使用实战案例》本文详细介绍了Java正则表达式的使用方法,涵盖语法细节、核心类方法、高级特性及实战案例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、正则表达式语法详解1. 基础字符匹配2. 字符类([]定义)3. 量词(控制匹配次数)4. 边

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

Java Scanner类解析与实战教程

《JavaScanner类解析与实战教程》JavaScanner类(java.util包)是文本输入解析工具,支持基本类型和字符串读取,基于Readable接口与正则分隔符实现,适用于控制台、文件输... 目录一、核心设计与工作原理1.底层依赖2.解析机制A.核心逻辑基于分隔符(delimiter)和模式匹