精品熟人妻一区二区三区四区不卡-精品爽黄69天堂a-精品水蜜桃久久久久久久-精品丝袜国产自在线拍-精品丝袜国产自在线拍a-精品丝袜国产自在线拍免费看

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網站管理員

十萬火急,客戶數(shù)據被截圖泄密了,緊急需求加水印...

admin
2025年4月12日 10:12 本文熱度 265

項目經理老王:?? 緊急加需求! 現(xiàn)在水印不僅要全頁面覆蓋,還要遍布每個角落!用戶就算截個按鈕局部圖,也得帶著水印!代碼必須給全,從生成到防護一條龍!B端產品必須要全加水印,快快快...

碼農小彬:?? 沒問題!上完整解決方案!
直接甩出完整代碼+原理分析??


?? 全頁面動態(tài)水印(Vue3 + Canvas + 防刪監(jiān)控)

? 核心目標

  1. 全頁面密集水印 —— 無論用戶截取哪部分頁面,必帶水印
  2. 動態(tài)綁定用戶信息 —— 顯示機密-{用戶名}-{時間}
  3. 防刪除/隱藏 —— 監(jiān)聽DOM變動自動恢復
  4. 零操作干擾 —— 透明+事件穿透

?? 完整代碼實現(xiàn)

1. 水印生成組件 Watermark.vue

這個代碼就是給整個網頁打上帶用戶信息和時間的透明水印,刪不掉還自動更新,防截圖防篡改。

<template>
  <!-- 水印層(覆蓋整個視口) -->
  <div ref="watermarkEl" class="global-watermark"></div>
</template>

<script setup>
import { ref, onMounted, watch } from 'vue';

const props = defineProps({
  text: { type: String, default: '內部保密' },  // 基礎文本
  userId: { type: String },                    // 綁定用戶ID
  opacity: { type: Number, default: 0.1 },     // 透明度
  density: { type: Number, default: 150 },     // 水印密度(像素間隔)
});

const watermarkEl = ref(null);

// ?? 動態(tài)生成水印圖(Canvas繪制)
const generateWatermark = () => {
  const canvas = document.createElement('canvas');
  const ctx = canvas.getContext('2d');
  const size = props.density; // 水印單元間距
  
  canvas.width = size * 2;
  canvas.height = size * 2;
  
  ctx.font = '14px Arial';
  ctx.fillStyle = `rgba(100, 100, 100, ${props.opacity})`;
  ctx.rotate(-25 * Math.PI / 180); // 傾斜25度
  
  // 填充文本(含動態(tài)用戶信息+時間)
  const dynamicText = `${props.text} - ${props.userId || '未知用戶'} - ${new Date().toLocaleString()}`;
  ctx.fillText(dynamicText, 10, size);
  
  return canvas.toDataURL('image/png');
};

// ?? 更新水印背景
const updateWatermark = () => {
  if (!watermarkEl.value) return;
  watermarkEl.value.style.backgroundImage = `url(${generateWatermark()})`;
};

// ?? 監(jiān)聽文本/用戶ID變化
watch([() => props.text, () => props.userId], updateWatermark);

// ??? 防刪除監(jiān)聽(MutationObserver)
const initObserver = () => {
  const observer = new MutationObserver((mutations) => {
    mutations.forEach((mutation) => {
      if (mutation.removedNodes.length) {
        const removed = Array.from(mutation.removedNodes);
        if (removed.some(node => node === watermarkEl.value)) {
          document.body.appendChild(watermarkEl.value); // 強制恢復水印
          console.warn('?? 檢測到水印被移除,已自動恢復!');
        }
      }
    });
  });
  
  observer.observe(document.body, { childList: true, subtree: true });
};

onMounted(() => {
  updateWatermark();
  initObserver();
});
</script>

<style scoped>
.global-watermark {
  position: fixed;
  top: 0;
  left: 0;
  width: 100vw;
  height: 100vh;
  background-repeat: repeat; /* 關鍵!重復鋪滿 */
  pointer-events: none;      /* 穿透點擊 */
  z-index: 9999;            /* 確保在最頂層 */
  opacity: v-bind('props.opacity');
}
</style>

2. 在管理后臺入口調用

呃...這個代碼大概就是在網頁最外層加了個半透明的水印,寫著"機密數(shù)據",還綁定了當前登錄用戶的ID,然后下面正常顯示網頁的其他內容這樣子!

<template>
  <div id="app">
    <!-- 全屏水印(綁定當前用戶) -->
    <Watermark 
      text="機密數(shù)據" 
      :userId="currentUser.id" 
      :opacity="0.15" 
      :density="120" 
    />
    <router-view /> <!-- 其他頁面內容 -->
  </div>
</template>

<script setup>
import Watermark from '@/components/Watermark.vue';
import { useAuthStore } from '@/stores/auth';

const currentUser = useAuthStore().user; // 假設從Pinia獲取用戶
</script>

??? 增強防護

1. 禁用開發(fā)者工具(可選)

這個代碼就是...如果有人想按F12或者Ctrl+Shift+I打開瀏覽器開發(fā)者工具,網頁就會彈窗警告。

// 在main.js中添加
document.addEventListener('keydown', (e) => {
  if (e.key === 'F12' || (e.ctrlKey && e.shiftKey && e.key === 'I')) {
    e.preventDefault();
    alert('禁止開發(fā)者工具!');
  }
});

2. 動態(tài)水印刷新(防截圖拼接)

這個代碼就是...讓水印每隔1小時變一次!

// 每小時更新一次水印時間戳
setInterval(() => {
  updateWatermark();
}, 60 * 60 * 1000);

?? 關鍵點說明

特性實現(xiàn)方式效果
全頁面覆蓋background-repeat: repeat無論頁面多大,水印無限平鋪
動態(tài)內容綁定userId+時間戳每個用戶水印唯一,可追溯
防刪除MutationObserver監(jiān)聽DOM刪除后自動重新插入
操作無阻pointer-events: none可點擊下方按鈕/輸入框

?? 注意事項

  1. 性能優(yōu)化:水印密度(density)建議≥100px,避免Canvas渲染壓力
  2. 移動端適配:測試100vh在移動端的表現(xiàn),必要時改用window.innerHeight
  3. 有時候可能還需要后端做一些操作,前端水印顯示用戶ID和時間,后端同時記錄操作日志,一旦泄露就能通過水印信息查后端日志精準定位責任人(就像快遞面單+物流系統(tǒng),撕掉面單也能通過系統(tǒng)查誰寄的)。

作者:盞燈
鏈接:https://juejin.cn/post/7491920480598769705
來源:稀土掘金
著作權歸作者所有。商業(yè)轉載請聯(lián)系作者獲得授權,非商業(yè)轉載請注明出處。

該文章在 2025/4/12 18:35:23 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業(yè)務管理,結合碼頭的業(yè)務特點,圍繞調度、堆場作業(yè)而開發(fā)的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 精品国产乱码久久久久久毛片 | 精品国产va久久久久久久冰 | 国产午夜精品一区二区三区嫩草 | 精品国产电影久久九九 | 亚洲αv久久久噜噜噜噜噜 亚洲а∨精品天堂在线 | 国产精品色欲av蜜臂在线观看 | 天码av无码一区二区三区四区 | 精品一区二区在线观看国产 | 国产成人亚洲精品91专区 | 人妻无码aⅴ中文字幕日韩 人妻无码aⅴ中文字幕视频 | 亚洲av日韩av天堂一区二区三区 | 国产在线播放永久免费 | 日韩免费精品无码一二三区 | 亚洲精品无码你懂 | 亚洲精品国产综合久久一线 | 中文字幕日产乱码一区 | 亚洲国产成人av手机在线观看 | 91小妖国产在线播放 | 亚洲午夜理论片 | 精品人妻午夜一区二区三区四 | 日韩精品免费无码一区二区 | 丰满少妇高潮惨叫久久久 | 69精品人人人人人人人人人 | 无码国产精品一区二区高潮 | 亚洲国产高清美女在线观看 | 亚洲日韩av中文字幕无码 | 亚洲欧美日韩综合一区在线观看 | 国产精品手机在线无码不卡 | 国产av巨作无遮挡 | 人与动物ppt免费模板大全 | 欧美日本一区二区三区在线 | 亚洲av永久无码野狼在线观看 | 国产狂喷潮在线观看中文 | 日韩国产在线一区二区三区 | 无码精品一区二区三区视频蜜臀 | 国产精品国产三级国产av剧情 | 日本大片免a费观看视频老师 | 欧美一区二区三区精品国产 | 成人免费无码毛片 | a国产欧美亚洲国产有线 | 亚洲无码黄色视频在线 |