
kkFileView 在线预览水印一键配置机密文档防泄密的 9 个参数速查表【免费下载链接】kkFileViewUniversal File Online Preview Project based on Spring-Boot项目地址: https://gitcode.com/GitHub_Trending/kk/kkFileView把合同、图纸、报价单丢进 kkFileView 做在线预览最怕的就是访客右键另存图、截图外发。本文带你把 kkFileView 的预览水印从0 配置改到全屏防泄密读完你能直接改 3 个配置项上线、用 URL 传参给不同访问者打不同水印并掌握 9 个可调参数的默认值与生效机制。一个真实场景预览页成了泄密出口想象一下你给 50 个合作方开了同一个 kkFileView 预览链接让他们在线看报价单和图纸。结果某天报价单出现在别家供应商的聊天群里——大家都能看但没人知道是谁转发出去的。传统做法是导出 PDF 再套水印可导出这一步本身就绕过了你的预览系统。更省事的路子是让 kkFileView 在预览页面直接铺满水印用户能正常看但每一帧都带字截图外传也能追责到人。这个能力藏在 kkFileView 的一个前端脚本和一组配置项里不需要改代码。水印底层原理一层盖在内容上的绝对定位 div一句话讲清原理kkFileView 把水印当成一层覆盖在预览内容之上、不可点击的 div 网格用transform旋转、用opacity调透明度铺满整个可视区。这套逻辑写在 server/src/main/resources/static/js/watermark.js 里。它做三件事按窗口宽高等比算出要摆多少行、多少列水印每个位置生成一个绝对定位的 div写入水印文字并旋转监听页面尺寸变化窗口一缩放就重新铺一遍所以水印是前端动态渲染的不走后端转图几乎不占服务器性能。它通过 server/src/main/resources/web/commonHeader.ftl 被 PDF、Office、图片等预览页统一引入这也是为什么改一次配置所有格式都生效。三步开启全局水印只改配置文件全局水印所有访问者、所有格式统一只需编辑 server/src/main/config/application.properties 里第九段水印配置。第一步填文字。watermark.txt留空时水印不显示这是开关本身# 水印文本内容留空 不显示水印 watermark.txt ${WATERMARK_TXT:机密资料_禁止外传}第二步控密度。两个间距项决定水印多密值越小越密# 水印 X 轴间距默认 10 watermark.x.space ${WATERMARK_X_SPACE:10} # 水印 Y 轴间距默认 10 watermark.y.space ${WATERMARK_Y_SPACE:10}第三步定外观。字体、字号、颜色、透明度、旋转角各占一行watermark.font ${WATERMARK_FONT:微软雅黑} watermark.fontsize ${WATERMARK_FONTSIZE:18px} watermark.color ${WATERMARK_COLOR:black} watermark.alpha ${WATERMARK_ALPHA:0.2} watermark.angle ${WATERMARK_ANGLE:10}改完保存即可。注意watermark.alpha是 0.0~1.0 的透明度0.2是很轻的灰既不影响阅读又足够上镜。9 个可调参数速查表默认值统一收在 server/src/main/java/cn/keking/config/WatermarkConfigConstants.java全部支持环境变量覆盖。记不清就照这张表抄参数默认值作用调优建议watermark.txt空水印文字空则不显示写姓名/工号/日期更易追责watermark.x.space10横向间距屏幕大就调大避免太挤watermark.y.space10纵向间距与 x 保持一致更协调watermark.font微软雅黑字体内网可用黑体等watermark.fontsize18px字号内容密就调小到 14pxwatermark.colorblack颜色白底建议深灰别用纯黑刺眼watermark.alpha0.2透明度 0~1越低越隐蔽0.1~0.3 合适watermark.width180单个水印单元宽文字长就调大watermark.height80单个水印单元高与 width 成比例watermark.angle10旋转角度斜向更难裁剪10~30 常见优势改配置不用重新打包参数全部走环境变量Docker 部署时加一行-e WATERMARK_TXTxxx就行。适用场景全员共用一个预览入口、需要统一防泄密底纹的内网系统。进阶用 URL 传参给每个人打不同水印全局水印有个天花板——所有人都长一个样。想做到谁访问就盖谁的名字得用请求级传参。server/src/main/java/cn/keking/web/filter/AttributeSetFilter.java 里有个关键设计每个水印参数都优先读 URL 里的同名参数读不到才回落配置文件。也就是说你在预览链接后追加查询串就能临时覆盖全局设置。10 个可传参数注意驼峰命名和配置项不同watermarkTxt watermarkXSpace watermarkYSpace watermarkFont watermarkFontsize watermarkColor watermarkAlpha watermarkWidth watermarkHeight watermarkAngle组合进预览地址url参数是文件地址的 Base64http://你的主机:8012/onlinePreview?urlBase64编码的文件地址 watermarkTxt张三_工号0042 watermarkAlpha0.3 watermarkAngle25这样就实现了千人千面你的前端在跳转前把当前登录用户的花名拼进watermarkTxt每个访客打开的都是带自己名字的水印页。泄了图一眼定位到人。优势无需改全局配置水印随用户动态变化追责到个人。适用场景对接企业 SSO、按登录态区分访问者的场景。热更新机制改完配置不用重启服务很多团队以为改application.properties必须重启。kkFileView 不是这样。server/src/main/java/cn/keking/config/ConfigRefreshComponent.java 用一个WatchService盯着配置文件文件一变就触发5 秒防抖后的重载private static final long DEBOUNCE_DELAY_SECONDS 5; // 文件变动 → 取消旧任务 → 延迟 5 秒后 loadConfig()这对水印的意义很直接你调完watermark.txt等几秒刷新预览页就生效不需要重启进程。压测或调参时反复改配置也不会被打断。顺带一提代码里的默认宽是 240、配置里默认是 180这类代码默认 vs 配置默认的小差异不影响使用——以配置文件为准ConfigRefreshComponent重载时读的是文件值。避坑水印不显示的 3 个排查点改完没水印按这个顺序查基本能覆盖 90% 的情况。watermark.txt是不是空的。这是第一开关留空前端直接return后面全不生效。先确认文件里确实写了字而不是只剩注释。传参名写错成配置名。配置文件是watermark.txt点分、小写URL 传参是watermarkTxt驼峰。两个世界混用会读不到值而回落到默认。看的是缓存页。全局开启cache.enabledtrue时同一文件地址可能命中旧预览。换个文件、或清一下缓存再验证排除改了但看的还是老结果的假象。另外两点容易踩watermark.color写纯黑 alpha调太高白底文档会一片刺眼阅读体验崩掉。建议深灰 0.2。水印是前端渲染只盖预览页不盖导出的原文件。如果目标是导出的 PDF 也带水印那属于文档转换环节和本文这套前端水印不是一回事别指望它。收尾把 kkFileView 的预览水印用起来核心就三块配置文件开全局底纹、URL 传参做个性化、热更新省掉重启。它不碰服务器转图链路纯前端铺网格成本几乎为零却能把预览页即泄密口这件事堵上大半。下一篇想聊聊 kkFileView 的信任主机白名单trust.host——它决定了哪些外部文件地址能被预览是这套系统安全性的另一道闸门和今天的水印正好一个防内鬼、一个防滥用。觉得有用就点个收藏配置参数表可以存下来调水印的时候直接对着抄 【免费下载链接】kkFileViewUniversal File Online Preview Project based on Spring-Boot项目地址: https://gitcode.com/GitHub_Trending/kk/kkFileView创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考