以用户登录为例,讲解token+redis的使用方式,环境是vue和springboot。
一、用户登录时序图
二、前端代码分析
1、前端使用vue store保存token
2、在每次发起请求时进行响应拦截,从vue store取出token,放在每次请求的请求头上
三、后端代码分析
1、在控制层接收账号,密码,调用服务层代码
2、服务层继续处理,返回token
3、JWTUtils代码过长,会在文章末尾进行分享
四、额外拓展
1、假如我们不想使用redis,那我们使用用户信息序列化,使用JWTUtils生成token返回给前端
2、校验的时候也是用JWTUtils建立一个校验方法,借助代码校验,不用使用redis
五、JWTUtils工具类分享
1、图片分享,方便查看
2、可复制代码
public class JWTUtils {
private static final String jwtToken = "7758258!@###$$";
public static String createToken(Long userId){
Map<String,Object> claims = new HashMap<>();
claims.put("userId",userId);
JwtBuilder jwtBuilder = Jwts.builder()
.signWith(SignatureAlgorithm.HS256, jwtToken) // 签发算法,秘钥为jwtToken
.setClaims(claims) // body数据,要唯一,自行设置
.setIssuedAt(new Date()) // 设置签发时间
.setExpiration(new Date(System.currentTimeMillis() + 24 * 60 * 60 * 60 * 1000));// 一天的有效时间
String token = jwtBuilder.compact();
return token;
}
public static Map<String, Object> checkToken(String token) {
// 检查并验证给定的JWT令牌是否有效
try {
// 使用Jwt解析器解析JWT令牌
Jwt parse = Jwts.parser().setSigningKey(jwtToken).parse(token);
// 返回JWT令牌的有效荷载部分(包含在JWT令牌的主体中的数据)
return (Map<String, Object>) parse.getBody();
} catch (Exception e) {
// 在解析或验证过程中发生异常时打印异常堆栈跟踪
e.printStackTrace();
}
// 如果无法解析或验证JWT令牌,则返回null
return null;
}
}
标签:令牌,String,redis,JWTUtils,JWT,token,简单 From: https://www.cnblogs.com/senior-shef/p/17739119.html