资讯动态

基于 Redis 实现共享 Session 登录

发布时间:2026/9/22 20:23:36 来源:尧图企业网站定制
基于 Redis 实现共享 Session 登录包含登录流程、拦截器校验、Redis 存储、ThreadLocal 用户上下文等核心模块一、核心流程梳理整个方案分为两大阶段:短信验证码登录 / 注册:验证手机号 + 验证码 → 自动注册新用户 → 生成 Token 并写入 Redis请求拦截与登录校验:请求携带 Token → 拦截器从 Redis 读取用户信息 → 写入 ThreadLocal 供业务使用 → 刷新 Token 有效期二、完整代码实现这些按包结构分好类(controller/service/utils/config)1.整体包结构com.hmdp ├── config // 配置类 ├── controller // 控制层 ├── dto // 数据传输对象 ├── entity // 实体类 ├── service │ ├── impl // 实现类 ├── utils // 工具类 ├── interceptor // 拦截器2.通用返回类 Resultpackage com.hmdp.dto; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor public class Result { private boolean success; private String msg; private Object data; public static Result ok() { return new Result(true, null, null); } public static Result ok(Object data) { return new Result(true, null, data); } public static Result fail(String msg) { return new Result(false, msg, null); } }3. Redis 常量类(RedisConstants.java)统一管理 Redis Key 前缀和过期时间,避免硬编码:package com.hmdp.utils; public class RedisConstants { // 短信验证码前缀 + 有效期(2分钟) public static final String LOGIN_CODE_KEY = "login:code:"; public static final Long LOGIN_CODE_TTL = 2L; // 用户登录Token前缀 + 有效期(30分钟) public static final String LOGIN_USER_KEY = "login:token:"; public static final Long LOGIN_USER_TTL = 30L; }4.UserHolder.javapackage com.hmdp.utils; import com.hmdp.dto.UserDTO; public class UserHolder { private static final ThreadLocalUserDTO tl = new ThreadLocal(); public static void saveUser(UserDTO user) { tl.set(user); } public static UserDTO getUser() { return tl.get(); } public static void removeUser() { tl.remove(); } }5. 用户 DTO 类(UserDTO.java)用于 Redis 存储和业务传递的用户信息载体:package com.hmdp.dto; import lombok.Data; @Data public class UserDTO { private Long id; // 用户ID private String nickName;// 昵称 private Strin

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价