token+redis的简单使用方式

发布时间 2023-10-01 19:05:57作者: 犹豫的象

以用户登录为例,讲解token+redis的使用方式,环境是vue和springboot。
一、用户登录时序图
image

二、前端代码分析
1、前端使用vue store保存token
image

2、在每次发起请求时进行响应拦截,从vue store取出token,放在每次请求的请求头上
image

三、后端代码分析
1、在控制层接收账号,密码,调用服务层代码
image

2、服务层继续处理,返回token
image

3、JWTUtils代码过长,会在文章末尾进行分享
四、额外拓展
1、假如我们不想使用redis,那我们使用用户信息序列化,使用JWTUtils生成token返回给前端
2、校验的时候也是用JWTUtils建立一个校验方法,借助代码校验,不用使用redis
五、JWTUtils工具类分享
1、图片分享,方便查看
image

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;
}

}