基于JWT+Redis的登录流程实现

基于JWT+Redis的登录流程实现的 Mermaid 时序图,详细展示了验证码生成、登录验证、JWT签发、Redis存储及拦截器校验等全过程。

java 复制代码
sequenceDiagram
    participant 用户
    participant 前端页面
    participant 后端服务
    participant Redis
    participant JwtUtil
    participant 拦截器
    participant LoginUserContext

    %% 获取验证码流程
    用户->>前端页面: 请求获取验证码
    前端页面->>后端服务: /getCaptcha
    后端服务->>后端服务: 创建SpecCaptcha图形验证码
    后端服务->>后端服务: 生成验证码文本(verCode)
    后端服务->>Redis: set("code:{uuid}", verCode, 30分钟)
    后端服务-->>前端页面: 返回验证码Base64图像和验证码key

    %% 登录流程
    用户->>前端页面: 输入账号、密码、验证码
    前端页面->>后端服务: /loginRedis(username, password, captchaCode, captchaKey)
    后端服务->>Redis: 获取验证码 get("code:{captchaKey}")
    alt 验证码错误
        后端服务-->>前端页面: 验证码错误,抛出异常
    else 验证码正确
        后端服务->>后端服务: sha256加密密码
        后端服务->>数据库: 查询用户(username+加密密码)
        alt 用户不存在
            后端服务-->>前端页面: 用户名或密码错误
        else 用户存在
            JwtUtil->>JwtUtil: 生成JWT token
            后端服务->>Redis: set("login:{token}", LoginUser, 30分钟)
            后端服务-->>前端页面: 返回token
        end
    end

    %% 用户请求其他接口
    用户->>前端页面: 携带Token访问接口
    前端页面->>拦截器: 添加 Authorization: Bearer {token}
    拦截器->>JwtUtil: 解析JWT Token
    JwtUtil-->>拦截器: 提取 userId、username
    拦截器->>LoginUserContext: 保存用户信息到ThreadLocal

    %% 刷新token(可选)
    拦截器->>Redis: 获取用户信息 login:{token}
    alt 用户存在
        Redis->>拦截器: 返回用户信息
        拦截器->>LoginUserContext: 保存用户
        拦截器->>Redis: 重置token过期时间
    else 用户信息不存在
        拦截器-->>前端页面: 拦截请求
    end

    %% 请求完成后清除ThreadLocal
    拦截器->>LoginUserContext: 清除用户信息(clear)

基于JWT+Redis的登录流程实现 补充说明:

1、验证码生成依赖:com.wf.captcha.SpecCaptcha

2、密码加密方式:DigestUtils.sha256Hex

3、登录成功后会:

创建 JWT Token(包含 userId 和 username)

将用户信息以 "login:{token}" 存入 Redis,有效期30分钟

后续所有接口请求都需要在 Header 中携带 Authorization: Bearer {token}

4、使用多个拦截器进行权限验证与刷新:

AuthenticationInterceptor 负责解析 Token 并设置上下文

RefreshTokenInterceptor 刷新 Token 过期时间

LoginInterceptor 判断用户是否存在于上下文中

相关推荐
心之伊始3 小时前
Java 后端接入大模型:从 Token、并发到推理成本的完整估算方法
java·spring boot·性能优化·大模型·llm
瀚高PG实验室3 小时前
pgsql-ogr-fdw
数据库·postgresql·瀚高数据库·highgo
IvorySQL3 小时前
PostgreSQL 技术日报 (6月5日)|PG19 Beta1 上线,PGConf.PL 2026开启征稿
数据库·postgresql·区块链
BlackTurn4 小时前
技术经理投标
java
YG亲测源码屋4 小时前
java配置环境变量、jdk环境变量配置、java环境变量设置方法
java·开发语言
abcy0712134 小时前
pycharm python sqlalchemy mysql增删改查实例csdn
数据库·oracle
MIUMIUKK4 小时前
从语法层面,看懂 Python 的特殊处
java·开发语言·python
无风听海4 小时前
IndexedDB 深度指南 浏览器中的事务型对象数据库
前端·数据库
hujinyuan201604 小时前
2026年3月 中国电子学会青少年软件编程(Python)三级考试试卷 真题及答案
java·python·算法
basketball6164 小时前
C++ 高级编程:2. 基本线程池实现
java·开发语言·c++