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

JSP 中郵箱脫敏顯示實現方案

     編輯:程式設計綜合問答

需求分析

後端查詢到完整郵箱,前端 JSP 頁面顯示時需將中間部分替換為 `*`(如 `zha****ng@example.com`)。

後端處理方案(推薦)

Java 工具方法

public static String maskEmail(String email) {
    if (email == null || !email.contains("@")) return email;
    
    String[] parts = email.split("@");
    String prefix = parts[0];
    String domain = parts[1];
    
    if (prefix.length() <= 3) {
        return prefix.charAt(0) + "***" + "@" + domain;
    }
    
    int keepStart = 2;
    int keepEnd = 1;
    String masked = prefix.substring(0, keepStart) 
                  + "****" 
                  + prefix.substring(prefix.length() - keepEnd)
                  + "@" + domain;
    return masked;
}

Controller 中調用

@GetMapping("/user/profile")
public String profile(Model model) {
    User user = userService.getCurrentUser();
    model.addAttribute("maskedEmail", maskEmail(user.getEmail()));
    return "profile";
}

前端 JSP 直接處理(不推薦,邏輯前置)

<%@ taglib prefix="fn" uri="https://java.sun.com/jsp/jstl/functions" %>
<%
    String email = (String) request.getAttribute("email");
    String masked = "";
    if (email != null && email.contains("@")) {
        String[] parts = email.split("@");
        String pre = parts[0];
        masked = pre.substring(0, Math.min(2, pre.length())) 
               + "****" 
               + (pre.length() > 3 ? pre.substring(pre.length()-1) : "")
               + "@" + parts[1];
    }
%>
<span><%= masked %></span>

JSTL/EL 純標簽實現(無腳本)

<c:set var="email" value="${user.email}" />
<c:set var="parts" value="${fn:split(email, '@')}" />
<c:set var="pre" value="${parts[0]}" />
<c:set var="domain" value="${parts[1]}" />
<c:choose>
    <c:when test="${fn:length(pre) le 3}">
        ${fn:substring(pre, 0, 1)}***@${domain}
    </c:when>
    <c:otherwise>
        ${fn:substring(pre, 0, 2)}****${fn:substring(pre, fn:length(pre)-1)}@${domain}
    </c:otherwise>
</c:choose>

最佳實踐建議

維度推薦做法
安全性後端脫敏,前端只顯示,避免原始數據傳輸
復用性封裝為工具類/自定義標簽/EL 函數
靈活性支持配置保留前綴/後綴長度、掩碼字符
擴展性同樣邏輯適用手機號、身份證、銀行卡等
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved