前言
原定方案,token 用的DES对称加密,然后为了加上有效期验证,最终改为JWT加密方式了
代码
Maven依赖:
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
JwtUtil.java:
package com.hyperdai.utils;
import cn.ticknet.study.constant.CookieConst;
import io.jsonwebtoken.*;
import io.jsonwebtoken.impl.crypto.MacProvider;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
import java.util.Date;
/**
* JWT校验工具类
* iss: jwt签发者;
* sub: jwt所面向的分组用户;
* aud: 接收jwt的一方;
* exp: jwt的过期时间,这个过期时间必须要大于签发时间;
* nbf: 定义在什么时间之前,该jwt都是不可用的;
* iat: jwt的签发时间;
* tid: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击;
*
* @author hyperdai
* @create 2020-01-05 15:43
*/
public class JwtUtil {
/**
* JWT 加解密类型
*/
private static final SignatureAlgorithm JWT_ALG = SignatureAlgorithm.HS256;
/**
* JWT 生成密钥使用的密码
*/
private static final String JWT_RULE = CookieConst.JWT_RULE;
/**
* JWT 添加至HTTP HEAD中的前缀
*/
private static final String JWT_SEPARATOR = "";
/**