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 ...
随机推荐
- 【Rust学习】内存安全探秘:变量的所有权、引用与借用
作者:京东零售 周凯 一.前言 Rust 语言由 Mozilla 开发,最早发布于 2014 年 9 月,是一种高效.可靠的通用高级语言.其高效不仅限于开发效率,它的执行效率也是令人称赞的,是一种少有 ...
- python加密解密之AES
def encrypt(self, params: str, key: str, iv: str) -> str: """加密""" ...
- myatbis的一个好的封装
package com.pj.project4sp; import org.springframework.beans.factory.annotation.Autowired; import org ...
- 线程基础知识 04 synchronized锁的四种状态和升级
转https://www.cnblogs.com/mingyueyy/p/13054296.html 1 轻量级锁和重量级锁简要说明 线程调度本来是由操作系统来管理的.现在,操作系统上跑了一个虚拟机J ...
- zookeeper05Curator
转https://blog.csdn.net/u012129558/article/details/81076487 1.zookeeper 开源客户端curator介绍 1.1 curator简 ...
- P21_事件传参与数据同步
事件绑定 在事件处理函数中为 data 中的数据赋值 通过调用 this.setData(dataObject) 方法,可以给页面 data 中的数据重新赋值,示例如下: 事件传参 小程序中的事件传参 ...
- SpringBoot 整合Seccurity、权限管理
Spring Boot 整合Spring Seccurity 1.创建maven工程 <?xml version="1.0" encoding="UTF-8&quo ...
- 2.17 win32 按钮事件的处理
按钮的本质就是窗口 点击查看代码 void CreateButton(HWND hwnd) { HWND hwndPushButton; HWND hwndCheckBox; HWND hwndRad ...
- Java面向对象进阶第一天
面向对象高级第一天 static关键字 是静态的意思,可以修饰成员变量,也可以修饰成员方法 成员变量的分类 静态成员变量 有static修饰,属于类,与类一起加载,内存中只有一份,可以被共享访问. 什 ...
- .Net 获取URL中指定参数值
有时候我们调用第三方接口,返回的并不是完整的链接带参数,而我们只需要获取指定的一些参数 例如:code=200&msg=success×tamp=1657539&no ...