首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Web 實作 Cookie 記住帳號密碼功能完整教學

     編輯:Java 相關知識

前言

在開發 Java Web 專案時,「記住帳號密碼」是提升使用者體驗的常見需求。本文將透過實際畢業專案案例,詳細說明如何利用 Cookie 在 SSM 框架下實作此功能,包含前端 JSP 頁面邏輯、後端 Controller 處理,以及完整的程式碼範例。

核心運作流程

  1. 使用者在登入頁面勾選「記住密碼」
  2. 表單提交至後端 Controller
  3. 後端將帳號、密碼加密後寫入 Cookie
  4. 下次造訪登入頁時,前端自動讀取 Cookie 並填入表單

前端實作:login.jsp

登入頁面需在載入時讀取 Cookie,若存在則自動填充帳號密碼欄位:

<%@page import="org.apache.commons.lang.StringUtils"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
    String name = "";
    String password = "";
    try {
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            for (Cookie cookie : cookies) {
                if ("cookie_user".equals(cookie.getName())) {
                    String value = cookie.getValue();
                    if (StringUtils.isNotBlank(value)) {
                        String[] parts = value.split("-");
                        if (parts.length >= 2) {
                            name = parts[0];
                            password = parts[1];
                        }
                    }
                }
            }
        }
    } catch (Exception e) {
        // 記錄日誌或忽略
    }
%>
<div class="wrapper">
    <div class="content">
        <div class="login">
            <form action="${pageContext.request.contextPath}/login" method="post">
                <input type="text" name="username" value="<%=name%>" placeholder="帳號" />
                <input type="password" name="password" value="<%=password%>" placeholder="密碼" />
                <input type="checkbox" name="rememberMe" <%=StringUtils.isNotBlank(name) ? "checked" : ""%> /> 記住密碼
                <button type="submit">登入</button>
            </form>
        </div>
    </div>
</div>

後端實作:Controller 處理 Cookie

登入成功後,若使用者勾選「記住密碼」,將帳號密碼以特定格式寫入 Cookie:

@PostMapping("/login")
public String login(@RequestParam String username,
                    @RequestParam String password,
                    @RequestParam(required = false) Boolean rememberMe,
                    HttpServletResponse response) {
    // 驗證邏輯...
    if (loginSuccess) {
        if (Boolean.TRUE.equals(rememberMe)) {
            String cookieValue = username + "-" + password; // 實務上建議加密
            Cookie cookie = new Cookie("cookie_user", cookieValue);
            cookie.setMaxAge(7 * 24 * 60 * 60); // 7 天有效期
            cookie.setPath("/");
            response.addCookie(cookie);
        } else {
            // 清除 Cookie
            Cookie cookie = new Cookie("cookie_user", "");
            cookie.setMaxAge(0);
            cookie.setPath("/");
            response.addCookie(cookie);
        }
        return "redirect:/index";
    }
    return "login";
}

安全性考量與最佳實踐

  • 加密儲存:實際專案中切勿明文儲存密碼,應使用 AES 或 Base64 加密
  • HttpOnly 標記:設定 cookie.setHttpOnly(true) 防止 XSS 攻擊
  • Secure 標記:HTTPS 環境下啟用 cookie.setSecure(true)
  • SameSite 屬性:設定 SameSite=Lax 或 Strict 防禦 CSRF

效果展示

輸入帳號密碼登入後

重新登入自動填入

總結

透過 Cookie 實作「記住帳號密碼」功能相對簡單,但在實務應用中必須重視資安風險。建議搭配加密、HttpOnly、Secure 等防護措施,或改用更安全的 Token 機制(如 JWT)搭配 LocalStorage 實現。

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