刘帅
2026-09-08 572df690f72ed4a077d934823f261dec39b3cc7d
cloud-server-management/src/main/java/com/dsh/guns/modular/system/util/ExcelUtil.java
@@ -32,7 +32,7 @@
         for (int i = 0; i < values.length; i++) {
            row = sheet.createRow(i + 1);
            for (int j = 0; j < values[i].length; j++) {
               row.createCell(j).setCellValue(values[i][j]);
               row.createCell(j).setCellValue(maskSensitiveValue(j < title.length ? title[j] : null, values[i][j]));
            }
         }
@@ -40,6 +40,25 @@
      return wb;
   }
   /** Export files are an external disclosure channel and always remain masked. */
   private static String maskSensitiveValue(String columnName, String value) {
      if (value == null) return null;
      String column = columnName == null ? "" : columnName.toLowerCase();
      if (column.contains("身份证") || column.contains("idcard") || column.contains("identity")) {
         return value.length() <= 10 ? stars(value.length()) : value.substring(0, 6) + stars(value.length() - 10) + value.substring(value.length() - 4);
      }
      if (column.contains("电话") || column.contains("手机") || column.contains("phone") || column.contains("mobile")) {
         return value.length() <= 7 ? stars(value.length()) : value.substring(0, 3) + "****" + value.substring(7);
      }
      return value;
   }
   private static String stars(int size) {
      StringBuilder value = new StringBuilder();
      for (int i = 0; i < size; i++) value.append('*');
      return value.toString();
   }
   public static void setResponseHeader(HttpServletResponse response, String fileName) {
      try {
         response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName));