先让我们来看下token的主要使用
首先是token工具类JWT的添加
public class JwtUtil {
//过期时间 30min
private static final int EXPIRE_TIME = 30;
//私钥
private static final String TOKEN_SECRET = "privateKey";
private static final String USER_NAME = "name";
/**
* 签发对象:这个用户的id
* 签发时间:现在
* 有效时间:30分钟
* 载荷内容:暂时设计为:这个人的名字
* 加密密钥:这个人的id加上一串字符串
* @param userId
* @param userName
* @return
*/
public static String createToken(Long userId, String userName) {
Calendar nowTime = Calendar.getInstance();
nowTime.add(Calendar.MINUTE,EXPIRE_TIME);
Date expiresDate = nowTime.getTime();
return JWT.create().withAudience(userId+"") //签发对象
.withIssuedAt(new Date()) //发行时间
.withExpiresAt(expiresDate) //有效时间
.withClaim(USER_NAME, userName) //载荷,随便写几个都可以
.sign(Algorithm.HMAC256(userId+TOKEN_SECRET)); //加密
}
/**
* 检验合法性,其中secret参数就应该传入的是用户的id
* @param token
* @throws TokenUnavailableException
*/
public static void verifyToken(String token, String secret) throws TokenUnavailableException {
try {
JWTVerifier verifier = JWT.require(Algorithm.HMAC256(secret+TOKEN_SECRET)).build();
verifier.verify(token);
} catch (Exception e) {
//效验失败
//自定义的一个异常
throw new TokenUnavailableException();
}
}
/**
* 获取签发对象
*/
public static String getAudience(String token) throws TokenUnavailableException {
String audience = null;
try {
audience = JWT.decode(token).getAudience().get(0);
} catch (JWTDecodeException j) {
//这里是token解析失败
throw new TokenUnavailableException();
}
return audience;
}
}
然后登录时会在后端生成token
// 生成token
String token = JwtUtil.createToken(sysUserVo.getId());
sysUserVo.setToken(token);
在前端获取到token后,会存到cookie中
var token = data.data.token;
addCookie("msgToken",token);
cookie存入token后,然后后台获取token
//获取token
String token = CookieUtil.INSTANCE.getTokenFromCookie(request);
//getUserId方法解析token字符串
Long account = JwtUtil.getUserId(request);
建一个CookieUtil实体类,遍历前台获取的名字是否与后台定义的一致,获取到登录认证的token
public class CookieUtil {
// 单例模式
public static final CookieUtil INSTANCE = new CookieUtil();
private CookieUtil() { }
/**
* @Description: 从cookie获取token
* @param request
* @return: java.lang.String
* @Author: lxt
* @Date: 2021/7/5 16:56
*/
public String getTokenFromCookie(HttpServletRequest request){
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if(cookie.getName().equals(GlobalConstant.TOKEN)){
return cookie.getValue();
}
}
return null;
}
}