JWT依赖
<dependency>
<groupId>io.jsonwebtokengroupId>
<artifactId>jjwtartifactId>
<version>0.9.1version>
dependency>
<dependency>
<groupId>com.auth0groupId>
<artifactId>java-jwtartifactId>
<version>3.10.3version>
dependency>
import io.jsonwebtoken.*;
import org.springframework.util.StringUtils;
import java.util.Date;
public class JwtHelper {
// token 失效时间 当前设置过期时间 24小时
private static long tokenExpiration = 24*60*60*1000;
//生成token 的私有盐 这个按道理来说只有自己知道 加密的时候加入盐 token就不会轻易的被破解
private static String tokenSignKey = "123456";
/**
* 生成jwt令牌【token】 也可以根据别的用户信息生成token 这里选择了 userId userName
* @param userId 用户id
* @param userName 用户名
* @return
*/
public static String createToken(Long userId,String userName){
String token = Jwts.builder()
//公共部分
.setSubject("YYGH-USER")
//设置token 的过期时间
.setExpiration(new Date(System.currentTimeMillis()+tokenExpiration))
//私有部分
.claim("userId",userId)
.claim("userName",userName)
//签名部分 设置加密算法 + 自己的盐
.signWith(SignatureAlgorithm.HS512,tokenSignKey)
//对token的压缩方法 载荷过长可以进行压缩
.compressWith(CompressionCodecs.GZIP)
.compact();
return token;
}
/**
* 根据token 得到用户ID
* @param token
* @return
*/
public static Long getUserIdByToken(String token){
//判断token是否 null
if(StringUtils.isEmpty(token)) return null;
/**
* 根据自定义的盐值解析token 获取token里面私有部分的信息
*
* tokenSignKey 自己设置的盐
* token 传过来的token
*/
Jws<Claims> claimsJwts = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);
//私有部分的数据体
Claims jwtsBody = claimsJwts.getBody();
Long userId = (Long) jwtsBody.get("userId");
return userId;
}
/**
* 根据token 获取用户名称
* @param token
* @return
*/
public static String getUserNameByToken(String token){
if(StringUtils.isEmpty(token)) return "";
Jws<Claims> claimsJws
= Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);
Claims claims = claimsJws.getBody();
return (String)claims.get("userName");
}