导入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 工具类的编写的更多相关文章

  1. jwt工具类的封装

    第一步先引入jar: <dependency> <groupId>com.nimbusds</groupId> <artifactId>nimbus-j ...

  2. Java基础知识强化92:日期工具类的编写和测试案例

    1. DateUtil.java,代码如下: package cn.itcast_04; import java.text.ParseException; import java.text.Simpl ...

  3. 编写一个数组工具类, 编写本软件的 帮助文档(API文档)

    本文档是对静态成员的练习. 一. 建立一个ArrayTool(数组工具)的类,在此类中对传入数组进行一些操作(选最大值.先最小值.冒泡排正序.选择排反序.输出数组元素), 二. 建立一个Test的类, ...

  4. 记一次关于JDBCUtils工具类的编写

    jdbc.properties数据库配置的属性文件内容如下 jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost/xxxx ...

  5. Bootstrap分页插件ajax返回数据,工具类的编写

    使用Bootstrap分页插件时,需要返回指定的参数,这样Bootstrap才能够识别 需要引入的css: <!-- boostrap table --> <link href=&q ...

  6. 02_c3p0之c3p0-config.xml配置案例,操作c3p0的jdbcUtil工具类的编写

     c3p0也是一个开源jdbc连接池,我们熟悉的Hibernate和Spring框架使用的都是该数据源. 这里获得数据源使用的方法是:ComboPooledDataSource 它提供的构造方法有 ...

  7. JWT工具类

    package com.ynhrm.common.utils; import io.jsonwebtoken.Claims;import io.jsonwebtoken.JwtBuilder;impo ...

  8. jwt 工具类

    public class TokenUtils { private Logger logger = LoggerFactory.getLogger(this.getClass()); /** * 签名 ...

  9. 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. ...

  10. SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后端篇(五): 数据表设计、使用 jwt、redis、sms 工具类完善注册登录逻辑

    (1) 相关博文地址: SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 前端篇(一):搭建基本环境:https://www.cnblogs.com/l-y-h/p ...

随机推荐

  1. Vue 3项目如何设置全局变量

  2. Vue17 手机表单数据

    1)v-model.trim trim修饰符是去掉前后空格 2)type="number" v-model.number type="number":只能输入数 ...

  3. springcloud 02-zookeeper

    转 https://www.cnblogs.com/h--d/p/12643306.html ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的 ...

  4. 强大的Excel工具,简便Vlookup函数操作:通用Excel数据匹配助手V2.0

    通用Excel数据匹配助手V2.0 For Windows 通用Excel数据匹配助手是一款非常实用的数据匹配软件,可以用来代替Excel中的Vlookup函数,帮助用户轻松完成数据匹配操作,需要的朋 ...

  5. python爬虫学习——文件操作,异常处理

    文件操作 ''' f = open("a.txt","w") #打开一个文件, w模式(写),如果文件不存在就在当前目录下创建 f.write("he ...

  6. 下篇 | 使用 🤗 Transformers 进行概率时间序列预测

    在<使用 Transformers 进行概率时间序列预测>的第一部分里,我们为大家介绍了传统时间序列预测和基于 Transformers 的方法,也一步步准备好了训练所需的数据集并定义了环 ...

  7. 钓鱼攻击之:WEB 钓鱼

    郑重声明: 本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关.倡导维护网络安全人人有责,共同维护网络文明和谐. 钓鱼 ...

  8. 基于C++的OpenGL 08 之基础光照

    1. 引言 本文基于C++语言,描述OpenGL的基础光照 前置知识可参考: 基于C++的OpenGL 07 之颜色 - 当时明月在曾照彩云归 - 博客园 (cnblogs.com) 笔者这里不过多描 ...

  9. 仿 MVC 三大特性

    1.先做个小例子 特性,只能通过反射实现 我们自定义一个特性 public class CustomAttribute : Attribute { public int Id; public stri ...

  10. 自己动手从零写桌面操作系统GrapeOS系列教程——8.x86介绍

    由于GrapeOS目前只支持x86,所以本讲我们简单的介绍一下x86. 百度百科上是这样介绍的:x86泛指一系列基于Intel 8086且向后兼容的中央处理器指令集架构. 中央处理器就是我们平时说的C ...