JWT 工具类的编写
导入JWT pom依赖
<!--JWT 依赖-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.0</version>
</dependency>
----------------------------------------------------------------------------
package com.woniuxy.config;
import io.jsonwebtoken.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* Description:JwtToken工具类
*
* @author: ykq11 <br/>
* Date: 2022/1/28:21:59 <br/>
*/
@Component
public class JwtTokenUtil {
private static final String CLAIM_KEY_USERNAME="sub";
private static final String CLAIM_KEY_CREATED = "created";
@Value("${jwt.secret}")
private String secret;
@Value("$jwt.expiration")
private Long expiration;
/**
* Description : 根据用户信息生成token <br/>
* ChangeLog : 1. 创建 (2022/1/28 22:08 [ykq11]);
** @param userDetails
* * @return java.lang.String
*/
public String generateToken(UserDetails userDetails){
Map<String, Object> claims = new HashMap<>();
claims.put(CLAIM_KEY_USERNAME,userDetails.getUsername());
claims.put(CLAIM_KEY_CREATED, new Date());
return generateToken(claims);
}
/**
* Description : TODO 根据荷载生成JWT Token <br/>
* ChangeLog : 1. 创建 (2022/1/28 22:11 [ykq11]);
** @param claims
* * @return java.lang.String
*/
private String generateToken(Map<String, Object> claims) {
return Jwts.builder().
setClaims(claims).
setExpiration(generateExpiration()).
compact();
}
/**
* Description : TODO 生成token失效时间 <br/>
* ChangeLog : 1. 创建 (2022/1/28 22:12 [ykq11]);
* *
* * @return java.util.Date
*/
private Date generateExpiration() {
return new Date(System.currentTimeMillis() + expiration * 1000);
}
/**
* Description : TODO 从token中获取用户名 <br/>
* ChangeLog : 1. 创建 (2022/1/28 22:17 [ykq11]);
** @param token
* * @return username
*/
public String getUsernameFromToken(String token){
String username;
try {
Claims clams=getClaimFromToken(token);
username=clams.getSubject();
} catch (Exception e) {
username = null;
}
return username;
}
/**
* Description : TODO 验证token是否有效<br/>
* ChangeLog : 1. 创建 (2022/1/28 22:28 [ykq11]);
** @param userDetails,token
* * @return null
*/
public boolean validateToken(String token, UserDetails userDetails) {
String username = getUsernameFromToken(token);
return username.equals(userDetails.getUsername())&& !isTokenExpired(token);
}
/**
* Description : TODO 判断token是否可以被刷新<br/>
* ChangeLog : 1. 创建 (2022/1/28 22:34 [ykq11]);
** @param token
* * @return null
*/
public boolean canRefresh(String token){
return !isTokenExpired(token);
}
/**
* Description : TODO 刷新token<br/>
* ChangeLog : 1. 创建 (2022/1/28 22:36 [ykq11]);
** @param token
* * @return null
*/
public String refreshToken(String token) {
Claims claims = getClaimFromToken(token);
claims.put(CLAIM_KEY_CREATED,new Date());
return generateToken(claims);
}
/**
* Description : TODO 判断token是否失效<br/>
* ChangeLog : 1. 创建 (2022/1/28 22:29 [ykq11]);
** @param token
* * @return null
*/
private boolean isTokenExpired(String token) {
Date expiredDate = getExpirationDateFromToken(token);
return expiredDate.before(new Date());
}
/**
* Description : TODO 获取token中的失效时间 <br/>
* ChangeLog : 1. 创建 (2022/1/28 22:32 [ykq11]);
** @param token
* * @return null
*/
private Date getExpirationDateFromToken(String token) {
Claims claims=getClaimFromToken(token);
return claims.getExpiration();
}
/**
* Description : TODO 从token获取荷载<br/>
* ChangeLog : 1. 创建 (2022/1/28 22:21 [ykq11]);
** @param token
* * @return Claims
*/
private Claims getClaimFromToken(String token) {
Claims claims=null;
try {
claims= Jwts.parser()
.setSigningKey(secret)
.parseClaimsJws(token)
.getBody();
} catch (Exception e) {
e.printStackTrace();
}
return claims;
}
}
JWT 工具类的编写的更多相关文章
- jwt工具类的封装
第一步先引入jar: <dependency> <groupId>com.nimbusds</groupId> <artifactId>nimbus-j ...
- Java基础知识强化92:日期工具类的编写和测试案例
1. DateUtil.java,代码如下: package cn.itcast_04; import java.text.ParseException; import java.text.Simpl ...
- 编写一个数组工具类, 编写本软件的 帮助文档(API文档)
本文档是对静态成员的练习. 一. 建立一个ArrayTool(数组工具)的类,在此类中对传入数组进行一些操作(选最大值.先最小值.冒泡排正序.选择排反序.输出数组元素), 二. 建立一个Test的类, ...
- 记一次关于JDBCUtils工具类的编写
jdbc.properties数据库配置的属性文件内容如下 jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost/xxxx ...
- Bootstrap分页插件ajax返回数据,工具类的编写
使用Bootstrap分页插件时,需要返回指定的参数,这样Bootstrap才能够识别 需要引入的css: <!-- boostrap table --> <link href=&q ...
- 02_c3p0之c3p0-config.xml配置案例,操作c3p0的jdbcUtil工具类的编写
c3p0也是一个开源jdbc连接池,我们熟悉的Hibernate和Spring框架使用的都是该数据源. 这里获得数据源使用的方法是:ComboPooledDataSource 它提供的构造方法有 ...
- JWT工具类
package com.ynhrm.common.utils; import io.jsonwebtoken.Claims;import io.jsonwebtoken.JwtBuilder;impo ...
- jwt 工具类
public class TokenUtils { private Logger logger = LoggerFactory.getLogger(this.getClass()); /** * 签名 ...
- JAVA结合 JSON Web Token(JWT) 工具类
引入java-jwt-3.3.0.jar . jjwt-0.9.0.jar .jackson-all-1.7.6.jar 或者maven <!-- https://mvnrepository. ...
- SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后端篇(五): 数据表设计、使用 jwt、redis、sms 工具类完善注册登录逻辑
(1) 相关博文地址: SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 前端篇(一):搭建基本环境:https://www.cnblogs.com/l-y-h/p ...
随机推荐
- ASP.NET Core 系列总结
<ASP.NET Core> 系列文章基于 .NET 3.1 和 .NET 6,主要是系统总结自己日常工作和学习中的知识点,之前是自己在 OneNote 上自己写,作为学习.总结笔记,逐渐 ...
- SpringMVC返回值类型及响应数据类型
1.SpringMVC 和 Struts2 的优略分析 共同点: 它们都是表现层框架,都是基于 MVC 模型编写的. 它们的底层都离不开原始 ServletAPI. 它们处理请求的机制都是一个核心控制 ...
- The Missing Semester - 第四讲 学习笔记
第四讲 数据整理 课程视频地址:https://www.bilibili.com/video/BV1ym4y197iZ 课程讲义地址:https://missing-semester-cn.githu ...
- EPICS Archiver Appliance存储waveform记录的尝试
https://blog.csdn.net/u013894429/article/details/79724454 按上面的指导很容易跑起来,试了一下,也能archive短些的waveform记录,很 ...
- python3 os.getcwd()和os.path.realpath()区别
在写一个android手机的自动化测试,用appium+python3,跟室友讨论拟定了一个框架,在写2个通用的简单模块时,遇到问题. 同一个目录下2个模块,driver.py(用于获取app 句柄) ...
- JZOJ 3207.Orthogonal Anagram
\(\text{Problem}\) 给出一个字符串,求经过重新排列的另一个字典序最小的字符串,满足:相同的位置上 原串与结果串的字符不同.不存在则输出空串. \(\text{Solution}\) ...
- 了解舵机以及MG996R的控制方法
了解舵机以及MG996R的控制方法 1.舵机基础知识: 舵机是遥控航空.航天模型控制动作,改变方向的重要组成部件,舵机是一种位置(角度)伺服的驱动器. 舵机主要适用于那些需要角度不断变化并可以保持的控 ...
- Linux操作命令(七) 1.cut命令 2.paste命令 3.tr命令
1.cut 命令 常用参数 参数 描述 -b 以字节为单位进行分割 -c 以字符为单位进行分割 -d 自定义分隔符,默认为制表符 -f 自定义字段 --complement 抽取整个文本行,除了那些由 ...
- 简述traceroute命令的原理
原理 traceroute命令是一种用于显示数据包从源主机到目的主机经过的路由器和网络设备的路径的工具.traceroute命令的原理是利用IP数据报的生存时间(TTL)字段和因特网控制报文协议(IC ...
- 2373. 矩阵中的局部最大值 (Easy)
问题描述 2373. 矩阵中的局部最大值 (Easy) 给你一个大小为 n x n 的整数矩阵 grid . 生成一个大小为 (n - 2) x (n - 2) 的整数矩阵 maxLocal ,并满足 ...