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 ...
随机推荐
- MySQL的简单安装配置
一.简单了解MySQL 1.在了解MySQL之前因该了解的东西 数据库(Database)指长期存储在计算机内的.有组织的.可共享的数据集合.数据库实际上就是一个文件集合,是一个存储数据的仓库,本质就 ...
- socket.io实现简易聊天室功能
本文简单介绍使用websocket实现一个简单的聊天室功能,我这里是用vite初始化的vue3项目. 在线体验地址:http://chat.lb0125.com/chat 需要安装的库: socket ...
- JZOJ 2020.01.11【NOIP提高组】模拟B组
2020.01.11[NOIP提高组]模拟B组 今天的题是不是和 \(C\) 组放错了? 呵呵 然,却只有 \(300\) 分 首先,\(T4\) 看错题了 后,一时想不到正解 讨论区,一看,三个字- ...
- 跳板攻击之:ICMP代理转发与反弹shell
跳板攻击之:ICMP代理转发与反弹shell 郑重声明: 本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关.倡导维护 ...
- Chai 3D之创建项目
推荐:将 NSDT场景编辑器 加入你的3D开发工具链 1.构建应用目录 我们将设置使用 CHAI3D 构建应用程序所需的基本目录结构和文件.根据您可能要使用的显示器或 GUI 库,为 FreeGL ...
- obj对象数据归类整理
两个字段根据id对应整理 <!doctype html> <html lang="en"> <head> <meta charse ...
- Postgresql动态共享内存类型
一.简介 linux为多个进程通信提供了不同的IPC机制,如:System V , POSIX 和 MMAP,所以Postgresql共享内存管理也支持以上类型. 在Postgresql中可以使用dy ...
- 干货!超实用的 Linux 初始化脚本
咸鱼今天给大家分享一个无论是学习还是工作中都很实用的 Linux 系统初始化脚本,其实就是各种命令的集合 完整代码在文章最后哦 定义相关变量 配置 yum 镜像源 获取阿里云 yum 镜像源 判断 ...
- 将python2.7项目转为Python3问题记录
将一个Python2.7开发的测试工具项目转化为Python3. 工具:Python自带的2to3.py 将所有.py文件进行转化,生成的python3文件为原文件名,python2文件在后面加.ba ...
- 一个方便IO单元测试的C#扩展库
对于我们.Net程序员,System.Web.Abstractions我们都非常熟悉,主要作用于Web可以实现单元测试,他是在.Net framework 3.5 sp1开始引入的,很好的解决项目表示 ...