注意引入的依赖的版本,和工具类是否匹配,不然报错

以下token工具类,需要的依赖:

<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.0</version>
</dependency>
package com.sangeng.utils;import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
import java.util.Date;
import java.util.UUID;/*** JWT工具类*/
public class JwtUtil {//有效期为public static final Long JWT_TTL = 60 * 60 *1000L;// 60 * 60 *1000  一个小时//设置秘钥明文public static final String JWT_KEY = "sangeng";public static String getUUID(){String token = UUID.randomUUID().toString().replaceAll("-", "");return token;}/*** 生成jtw* @param subject token中要存放的数据(json格式)* @return*/public static String createJWT(String subject) {JwtBuilder builder = getJwtBuilder(subject, null, getUUID());// 设置过期时间return builder.compact();}/*** 生成jtw* @param subject token中要存放的数据(json格式)* @param ttlMillis token超时时间* @return*/public static String createJWT(String subject, Long ttlMillis) {JwtBuilder builder = getJwtBuilder(subject, ttlMillis, getUUID());// 设置过期时间return builder.compact();}private static JwtBuilder getJwtBuilder(String subject, Long ttlMillis, String uuid) {SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;SecretKey secretKey = generalKey();long nowMillis = System.currentTimeMillis();Date now = new Date(nowMillis);if(ttlMillis==null){ttlMillis=JwtUtil.JWT_TTL;}long expMillis = nowMillis + ttlMillis;Date expDate = new Date(expMillis);return Jwts.builder().setId(uuid)              //唯一的ID.setSubject(subject)   // 主题  可以是JSON数据.setIssuer("sg")     // 签发者.setIssuedAt(now)      // 签发时间.signWith(signatureAlgorithm, secretKey) //使用HS256对称加密算法签名, 第二个参数为秘钥.setExpiration(expDate);}/*** 创建token* @param id* @param subject* @param ttlMillis* @return*/public static String createJWT(String id, String subject, Long ttlMillis) {JwtBuilder builder = getJwtBuilder(subject, ttlMillis, id);// 设置过期时间return builder.compact();}public static void main(String[] args) throws Exception {
//        String jwt = createJWT("2123");Claims claims = parseJWT("eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIyOTY2ZGE3NGYyZGM0ZDAxOGU1OWYwNjBkYmZkMjZhMSIsInN1YiI6IjIiLCJpc3MiOiJzZyIsImlhdCI6MTYzOTk2MjU1MCwiZXhwIjoxNjM5OTY2MTUwfQ.NluqZnyJ0gHz-2wBIari2r3XpPp06UMn4JS2sWHILs0");String subject = claims.getSubject();System.out.println(subject);
//        System.out.println(claims);}/*** 生成加密后的秘钥 secretKey* @return*/public static SecretKey generalKey() {byte[] encodedKey = Base64.getDecoder().decode(JwtUtil.JWT_KEY);SecretKey key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");return key;}/*** 解析** @param jwt* @return* @throws Exception*/public static Claims parseJWT(String jwt) throws Exception {SecretKey secretKey = generalKey();return Jwts.parser().setSigningKey(secretKey).parseClaimsJws(jwt).getBody();}}

以下工具类都可以,版本号限制不大

public class JwtTokenUtil {public static final String CLAIM_KEY_USERNAME = "sub";public static final String CLAIM_KEY_CREATED = "created";@Value("${jwt.secret}")//从properties文件里取值private String secret;@Value("${jwt.expiration}")//从properties文件里取值private Long expiration;//生成tokenpublic String generateToken(User user) {String originPhoneNum = SecretUtil.desEncrypt(user.getPhoneNum(),"1234567890123456","1234567890123456");//        准备荷载Map<String,Object> claims = new HashMap<>();claims.put(CLAIM_KEY_USERNAME, user.getUsername());claims.put(CLAIM_KEY_CREATED,new Date());return generateToken(claims);}//根据荷载生成tokenprivate String generateToken(Map<String,Object> claims){return Jwts.builder().setClaims(claims).setExpiration(generateExpirationDate()).signWith(SignatureAlgorithm.ES512,secret).compact();}//生成token失效时间private Date generateExpirationDate() {return new Date(System.currentTimeMillis()+expiration*1000);}//检验token//    根据token获取用户信息,usernamepublic String getUserDetailsFromToken(String token){String username;//获取荷载try{Claims claims = getClaimsFromToken(token);username = claims.getSubject();}catch (Exception e){username=null;}return username;}
//    从token中获取荷载private Claims getClaimsFromToken(String token) {Claims claim = null;try{claim = Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody();}catch (Exception e){e.printStackTrace();}return claim;}//    检验token是否有效public boolean validateToken(String token, UserDetails userDetails){//        1、token是否过期boolean tokenExpired = isTokenExpired(token);
//        2、用户名是否相等String username = getUserDetailsFromToken(token);return (username.equals(userDetails.getUsername()) && !tokenExpired);}
//    判断token是否失效private boolean isTokenExpired(String token) {
//        获取token失效时间Date expireDate = getExpiredDateFromToken(token);
//        判断expireDate在当前时间前面,则token失效return expireDate.before(new Date());}//        获取token失效时间private Date getExpiredDateFromToken(String token) {Claims claims = getClaimsFromToken(token);return claims.getExpiration();}//    判断token是否可以被刷新  token 没过期就可以刷新public boolean canRefreash(String token){return !isTokenExpired(token);}//刷新token   实际只修改过期时间public String refreashToken(String token){//获取荷载Claims claims = getClaimsFromToken(token);//修改过期时间claims.put(CLAIM_KEY_CREATED,new Date());//根据荷载生成tokenreturn generateToken(claims);}
}

生成token的工具类相关推荐

  1. java生成验证码工具类_Java生成图形验证码工具类

    生成验证码效果 validatecode.java 验证码生成类 package cn.dsna.util.images; import java.awt.color; import java.awt ...

  2. 阿里云实人认证生成签名SignNature工具类

    此类是有时间写的,使用阿里云给出的demo测试正确.实际在调用阿里云的实人认证接口时并未用到,可直接集成相关的sdk. 代码 package cn.com.chnsys.utils;import ja ...

  3. java生成圆_java工具类-java实现 生成圆头像

    1.创建RoundHeadImgUtils工具类 package com.mrd.utils; import javax.imageio.ImageIO; import java.awt.*; imp ...

  4. 根据时间戳生成订单号工具类

    生成订单时候,需要订单号,订单号生成工具如下: 效果: @Testpublic static void main(String[] args) {System.out.println("现在 ...

  5. 【Java】登录操作中随机生成验证码的工具类

    效果图: 工具类CreateImageCode.java: import java.awt.Color; import java.awt.Font; import java.awt.Graphics; ...

  6. java 生成UUID字符串工具类 UUIDUtil

    package com.xj.hhjk.common.util.security; import java.util.UUID; import java.util.regex.Matcher; imp ...

  7. java 生成水印图片工具类, MultipartFile接收上传的图片,处理成加水印之后的MultipartFile

    /*** Created by Administrator on 2018/4/26.* JAVA图片处理工具*/ public class ImageUtil {public enum positi ...

  8. java 导出mdb文件_Java中Java生成mdb文件工具类

    package com.util; /**  * Java生成mdb文件[MS Access文件]  * 1. 在ClassPath下存一个空的blank.mdb. (也就是在你的项目中包含一个空白的 ...

  9. 后端生成Token架构与设计详解

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招! 个人原创100W+访问量博客:点击前往,查看更多 作者:巨 ...

最新文章

  1. HTTP详解(1)-工作原理【转】
  2. 22条API设计的实践
  3. 城市运行一网统管_全国率先!“一屏观天下、一网管全城”,临港城市运行“一网统管”平台启动建设...
  4. Excel 2016新增函数之IFS
  5. Node.js新手教程——怎样实现文件上传功能
  6. 决策树分类算法matlab,matlab实现的C45分类决策树算法
  7. JS精粹知识点和我的解释
  8. php100视频教程html,PHP100视频教程48:Ajax+PHP快速上手及应用
  9. JAVA中ResourceBundle使用详解(一)
  10. 案例: 模拟京东快递单号查询
  11. 植物大战僵尸 - 修改关卡和商店金钱
  12. 130行Python代码模仿“蚂蚁呀嘿”特效,太魔性了!
  13. 28句最精辟有哲理的生活感悟说说,经典至极,总有一句说到你的心里
  14. 关于微信小程序与Java后台交互数据中中文乱码问题的讨论
  15. 不要与最好的朋友合伙开公司?对吗
  16. 尚医通 (二十)就诊人用户管理 | 平台用户管理
  17. Chrome浏览器首页被hao123劫持的解决办法
  18. 【深度学习】详解Faster-R-CNN
  19. java 判断ftp文件是否存在_java如何检验ftp服务器中指定文件是否存在
  20. 挠性电路板和刚性电路板的区别,以及柔性电路板焊接方法操作步骤

热门文章

  1. 电梯控制系统的实现(代码简洁优质、易懂)
  2. Google Android 开发者网站更新了
  3. ICASSP 2022 | 前沿音视频成果分享:基于可变形卷积的压缩视频质量增强网络
  4. asterisk安装步骤
  5. 如何在windows平台下造字
  6. 证据确凿!360,彻头彻尾的木马?
  7. Java中保留两位小数,和kotlin保留两位小数
  8. 笔试——2019方正FPGA
  9. JS流程控制语句 反反复复(while循环) 和for循环有相同功能的还有while循环, while循环重复执行一段代码,直到某个条件不再满足。...
  10. Matlab AppDesigner编程教程第1章——面向对象编程