一、SpringBoot 集成 Redis 步骤1. 引入依赖在pom.xml中添加 Redis 起步依赖xmldependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-redis/artifactId /dependencygroupIdorg.springframework.boot标识 Spring 官方项目组artifactIdspring-boot-starter-data-redisRedis 集成的起步依赖自动引入相关客户端和配置2. 配置 Redis 连接信息在application.yml中配置 Redis 连接参数yamlspring: data: redis: host: localhost # Redis 服务器地址 port: 6379 # Redis 默认端口 # password: 你的密码 # 可选有密码时配置 # database: 0 # 可选指定使用的数据库编号默认03. 核心 APIStringRedisTemplateSpringBoot 自动配置了StringRedisTemplate专门用于字符串类型的 Redis 操作常用方法java运行Autowired private StringRedisTemplate stringRedisTemplate; // 1. 存储字符串 Test public void testSet() { stringRedisTemplate.opsForValue().set(username, 如花); } // 2. 获取字符串 Test public void testGet() { String value stringRedisTemplate.opsForValue().get(username); System.out.println(value); // 输出如花 } // 3. 带过期时间的存储如令牌场景 stringRedisTemplate.opsForValue().set(token:1001, abc123, 30, TimeUnit.MINUTES);二、基于 Redis 的令牌主动失效机制1. 核心目标解决传统 Token 无法主动失效的问题实现修改密码、退出登录后旧令牌立即失效的安全控制。2. 完整流程登录阶段令牌存入 Redis用户登录成功后生成唯一令牌Token将令牌响应给前端通常放在响应头 / 响应体中同时将令牌存入 RedisKey 为token:用户IDValue 为令牌值并设置过期时间如 30 分钟示例代码java运行// 登录成功逻辑 String token UUID.randomUUID().toString(); // 存入Redis设置30分钟过期 stringRedisTemplate.opsForValue().set(token: userId, token, 30, TimeUnit.MINUTES); // 响应给前端 return Result.success(token);请求阶段拦截器验证令牌自定义LoginInterceptor拦截所有请求执行以下验证逻辑从请求头中获取前端携带的令牌从 Redis 中取出该用户对应的令牌通过用户 ID 解析 Key比较两个令牌是否一致一致放行请求刷新 Redis 中令牌的过期时间不一致 / Redis 中不存在拒绝请求返回 “未登录 / 令牌已失效”示例代码java运行public class LoginInterceptor implements HandlerInterceptor { Autowired private StringRedisTemplate stringRedisTemplate; Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 1. 获取请求头中的token String token request.getHeader(token); if (token null || token.isEmpty()) { response.setStatus(401); return false; } // 2. 解析用户ID示例假设token中包含用户ID实际可通过JWT解析 String userId parseUserIdFromToken(token); // 3. 从Redis中获取存储的token String redisToken stringRedisTemplate.opsForValue().get(token: userId); // 4. 验证token是否一致 if (redisToken null || !redisToken.equals(token)) { response.setStatus(401); return false; } // 5. 刷新过期时间 stringRedisTemplate.expire(token: userId, 30, TimeUnit.MINUTES); return true; } }主动失效阶段删除 Redis 中的令牌当用户执行修改密码、退出登录等操作时直接删除 Redis 中对应的令牌java运行// 修改密码成功后 stringRedisTemplate.delete(token: userId); // 退出登录时 stringRedisTemplate.delete(token: userId);此时前端携带的旧令牌在下次请求时会被拦截器验证失败实现主动失效。三、关键知识点补充1. 为什么要用 Redis 实现令牌主动失效传统无状态 Token如 JWT依赖客户端过期服务器无法主动控制存在安全风险如用户修改密码后旧 Token 仍可使用Redis 是高性能内存数据库读写速度快支持设置过期时间适合存储临时令牌通过 Redis 统一管理令牌服务器可以随时删除令牌实现主动失效控制2. 令牌存储设计建议Key 设计token:用户ID方便快速定位和删除过期时间设置合理的过期时间如 30 分钟避免 Redis 内存占用过高刷新机制每次请求成功后刷新过期时间实现 “登录态续期”3. 注意事项拦截器需要配置excludePathPatterns放行登录、注册等无需验证的接口Redis 需配置持久化如 RDB/AOF避免重启后令牌丢失导致用户全部掉线生产环境中建议对 Redis 连接配置密码和 SSL提升安全性