首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Spring MVC 記住密碼/自動登錄:Cookie + Token 方案實現

     編輯:程式設計疑難解答

核心思路

  1. 登錄成功:生成隨機 Token,關聯用戶 ID 存入 Redis(設置過期時間,如 30 天),將 Token 寫入 HttpOnly Cookie (remember_me=token; Max-Age=2592000; Path=/; HttpOnly; Secure)。
  2. 攔截器預處理:preHandle 中檢查 Session 無用戶且 Cookie 存在 Token → 從 Redis 獲取 UserId → 查詢用戶信息存入 Session → 續期 Token/Redis。
  3. 登出/修改密碼:刪除 Redis Token、清除 Cookie。

關鍵代碼

// 登錄
String token = UUID.randomUUID().toString().replace("-", "");
redisTemplate.opsForValue().set("remember:" + token, userId, 30, TimeUnit.DAYS);
Cookie cookie = new Cookie("remember_me", token);
cookie.setMaxAge(30*24*3600); cookie.setPath("/"); cookie.setHttpOnly(true);
response.addCookie(cookie);

// 攔截器
String token = WebUtils.getCookie(request, "remember_me");
if (token != null && session.getAttribute("user") == null) {
    String userId = redisTemplate.opsForValue().get("remember:" + token);
    if (userId != null) {
        User user = userService.getById(userId);
        session.setAttribute("user", user);
        redisTemplate.expire("remember:" + token, 30, TimeUnit.DAYS); // 滑動過期
    }
}

參考

SpringMVC記住密碼功能完整實現

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved