package com.sense.fircloud.common.util;
import com.sense.fircloud.common.exception.BusinessException;
import com.sense.fircloud.common.result.RespCode;
import io.jsonwebtoken.*;
import org.springframework.util.StringUtils;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;
import java.security.Key;
import java.util.Date;
public class JwtUtils {
//一天
private static long tokenExpiration = 24*60*60*1000;
private static String tokenSignKey = "com1sense2fircloud3";
private static Key getKeyInstance(){
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
byte[] bytes = DatatypeConverter.parseBase64Binary(tokenSignKey);
return new SecretKeySpec(bytes,signatureAlgorithm.getJcaName());
}
public static String createToken(String userId, String mobile) {
String token = Jwts.builder()
.setSubject("SRB-USER")
.setExpiration(new Date(System.currentTimeMillis() + tokenExpiration))
.claim("userId", userId)
.claim("mobile", mobile)
.signWith(SignatureAlgorithm.HS512, getKeyInstance())
.compressWith(CompressionCodecs.GZIP)
.compact();
return token;
}
/**
* 判断token是否有效
* @param token
* @return
*/
public static boolean checkToken(String token) {
if(StringUtils.isEmpty(token)) {
return false;
}
try {
Jwts.parser().setSigningKey(getKeyInstance()).parseClaimsJws(token);
return true;
} catch (Exception e) {
return false;
}
}
public static String getUserId(String token) {
Claims claims = getClaims(token);
String userId = (String)claims.get("userId");
return userId;
}
public static String getMobile(String token) {
Claims claims = getClaims(token);
return (String)claims.get("mobile");
}
public static void removeToken(String token) {
//jwttoken无需删除,客户端扔掉即可。
}
/**
* 校验token并返回Claims
* @param token
* @return
*/
private static Claims getClaims(String token) {
if(StringUtils.isEmpty(token)) {
// LOGIN_AUTH_ERROR(-211, "未登录"),
throw new BusinessException(RespCode.TOKEN_FAILURE);
}
try {
Jws<Claims> claimsJws = Jwts.parser().setSigningKey(getKeyInstance()).parseClaimsJws(token);
Claims claims = claimsJws.getBody();
return claims;
} catch (Exception e) {
throw new BusinessException(RespCode.TOKEN_FAILURE);
}
}
}
JwtUtiles 生成token工具类
最新推荐文章于 2024-05-15 17:48:42 发布
本文介绍了如何使用Spring Boot和JWT实现用户认证,包括创建和检验JWT token,以及关键操作如获取用户ID和手机。着重于安全性和有效期设置。

1337

被折叠的 条评论
为什么被折叠?



