徐州有哪些做网站免费软文网站
基于JWT+Redis的登录流程实现的 Mermaid 时序图,详细展示了验证码生成、登录验证、JWT签发、Redis存储及拦截器校验等全过程。
sequenceDiagramparticipant 用户participant 前端页面participant 后端服务participant Redisparticipant JwtUtilparticipant 拦截器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分钟)后端服务-->>前端页面: 返回tokenendend%% 用户请求其他接口用户->>前端页面: 携带Token访问接口前端页面->>拦截器: 添加 Authorization: Bearer {token}拦截器->>JwtUtil: 解析JWT TokenJwtUtil-->>拦截器: 提取 userId、username拦截器->>LoginUserContext: 保存用户信息到ThreadLocal%% 刷新token(可选)拦截器->>Redis: 获取用户信息 login:{token}alt 用户存在Redis->>拦截器: 返回用户信息拦截器->>LoginUserContext: 保存用户拦截器->>Redis: 重置token过期时间else 用户信息不存在拦截器-->>前端页面: 拦截请求end%% 请求完成后清除ThreadLocal拦截器->>LoginUserContext: 清除用户信息(clear)

补充说明:
1、验证码生成依赖:com.wf.captcha.SpecCaptcha2、密码加密方式:DigestUtils.sha256Hex
3、登录成功后会:
创建 JWT Token(包含 userId 和 username)
将用户信息以 "login:{token}" 存入 Redis,有效期30分钟
后续所有接口请求都需要在 Header 中携带 Authorization: Bearer {token}
4、使用多个拦截器进行权限验证与刷新:
AuthenticationInterceptor 负责解析 Token 并设置上下文
RefreshTokenInterceptor 刷新 Token 过期时间
LoginInterceptor 判断用户是否存在于上下文中