dogonthemoon
恿粤晒话大致的实现流程业务层--系统拦截器--数据库--系统拦截器--返回结果加密注解设计把需要加密的字段通过我们自定义的加密注解进行标识所以我们需要先自定义一段加密注解的代码Target(ElementType.FIELD)Retention(RetentionPolicy.RUNTIME)public interface Encrypt {}实体类在实体类上使用注解标记需要加密字段Datapublic class User {private Long id;private String username;Encryptprivate String password;Encryptprivate String email;Encryptprivate String phone;}加密工具类基于AES加密算法实现对字段名的加密大家可以选择其他的加密算法public class EncryptionUtil {privatestaticfinal String ALGORITHM AES;privatestaticfinal String TRANSFORMATION AES/ECB/PKCS5Padding;// AES加密public static String encrypt(String plainText, String key) {try {SecretKeySpec secretKey new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), ALGORITHM);Cipher cipher Cipher.getInstance(TRANSFORMATION);cipher.init(Cipher.ENCRYPT_MODE, secretKey);byte[] encryptedBytes cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8));return Base64.getEncoder().encodeToString(encryptedBytes);} catch (Exception e) {thrownew RuntimeException(加密失败, e);}}// AES解密public static String decrypt(String cipherText, String key) {try {SecretKeySpec secretKey new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), ALGORITHM);Cipher cipher Cipher.getInstance(TRANSFORMATION);cipher.init(Cipher.DECRYPT_MODE, secretKey);byte[] decryptedBytes cipher.doFinal(Base64.getDecoder().decode(cipherText));returnnew String(decryptedBytes, StandardCharsets.UTF_8);} catch (Exception e) {thrownew RuntimeException(解密失败, e);}}}系统拦截器设计通过拦截实现自动加密和自动解密// 加密拦截器Intercepts({Signature(type Executor.class, method update, args {MappedStatement.class, Object.class})})Componentpublic class FieldEncryptionInterceptor implements Interceptor {Value(${encryption.key:mySecretKey12345})private String encryptionKey;Overridepublic Object intercept(Invocation invocation) throws Throwable {Object[] args invocation.getArgs();MappedStatement mappedStatement (MappedStatement) args[0];Object parameter args[1];// 获取SQL命令类型String sqlCommandType mappedStatement.getSqlCommandType().toString();// 对INSERT和UPDATE操作进行加密处理if (INSERT.equals(sqlCommandType) || UPDATE.equals(sqlCommandType)) {encryptFields(parameter);}return invocation.proceed();}// 解密拦截器Intercepts({Signature(type ResultSetHandler.class, method handleResultSets, args {Statement.class})})Componentpublic class FieldDecryptionInterceptor implements Interceptor {Value(${encryption.key:mySecretKey12345})private String encryptionKey;Overridepublic Object intercept(Invocation invocation) throws Throwable {// 执行原始方法Object result invocation.proceed();// 对查询结果进行解密处理if (result instanceof List) {List list (List) result;for (Object item : list) {decryptFields(item);}} else {decryptFields(result);}return result;}}}测试场景用户信息保护在用户注册时自动加密用户的密码、邮箱、手机号等敏感信息即使数据库泄露也不会造成用户隐私泄露金融数据保护对用户的银行卡号、交易记录等金融数据进行加密存储满足金融行业的合规要求医疗医保数据保护对患者的病历、诊断结果等医疗隐私数据进行加密保护患者隐私企业数据保护对企业内部的商业机密、客户资料等重要数据进行加密保护

相关新闻

一篇文章带你搞懂“设计模式”! - - 责任链模式(23)

一篇文章带你搞懂“设计模式”! - - 责任链模式(23)

责任链模式职责链模式(Chain of Responsibility Pattern)又叫责任链模式,为请求创建了一个接收者对象的链(简单示意图)。这种模式对请求的发送者和接收者进行解耦。职责链模式通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么…

2026/7/10 15:11:24 阅读更多 →
C#转java的最好利器easy-query就是efcorej sqlsugarj freesqlj

C#转java的最好利器easy-query就是efcorej sqlsugarj freesqlj

岸荚伺映前言 我之前在一家餐饮公司待过两年,每天中午和晚上用餐高峰期,系统的并发量不容小觑。 为了保险起见,公司规定各部门都要在吃饭的时间轮流值班,防止出现线上问题时能够及时处理。 我当时在后厨显示系统团队,该…

2026/7/15 6:13:29 阅读更多 →
力扣刷题——28.找出字符串中第一个匹配项的下标

力扣刷题——28.找出字符串中第一个匹配项的下标

28.找出字符串中第一个匹配项的下标 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 示例 1&#xff…

2026/7/12 5:22:14 阅读更多 →

最新新闻

Zotero 插件配置与工作流搭建(进阶指南)

Zotero 插件配置与工作流搭建(进阶指南)

1. Zotero 插件生态概览 作为一款开源的文献管理工具,Zotero 的强大之处在于其丰富的插件生态。这些插件如同乐高积木,让用户能够根据自己的研究需求搭建个性化的工作流。在科研场景中,我们通常会遇到三个核心痛点:中文文献支持不…

2026/7/16 15:55:05 阅读更多 →
如何用Awakened PoE Trade提升你的流放之路交易效率:新手必备实战指南

如何用Awakened PoE Trade提升你的流放之路交易效率:新手必备实战指南

如何用Awakened PoE Trade提升你的流放之路交易效率:新手必备实战指南 【免费下载链接】awakened-poe-trade :heavy_dollar_sign: :hammer: Path of Exile app for price checking 项目地址: https://gitcode.com/gh_mirrors/aw/awakened-poe-trade 你是否在…

2026/7/16 15:55:04 阅读更多 →
在Windows上运行macOS:OSX-Hyper-V项目完整技术解析与实战指南

在Windows上运行macOS:OSX-Hyper-V项目完整技术解析与实战指南

在Windows上运行macOS:OSX-Hyper-V项目完整技术解析与实战指南 【免费下载链接】OSX-Hyper-V OpenCore configuration for running macOS on Windows Hyper-V. 项目地址: https://gitcode.com/gh_mirrors/os/OSX-Hyper-V 你是否曾经梦想在Windows电脑上体验m…

2026/7/16 15:55:04 阅读更多 →
C++读写锁std::shared_mutex原理与应用:多线程性能优化实战

C++读写锁std::shared_mutex原理与应用:多线程性能优化实战

1. 项目概述:为什么读写锁是多线程性能优化的“必杀技”? 在C多线程开发里,数据竞争和锁竞争是性能的两大杀手。你肯定遇到过这种场景:一个配置表在内存里,大部分线程只是频繁地读取它,偶尔才有一个线程去更…

2026/7/16 15:55:04 阅读更多 →
2026企业出海营销新趋势|传播易全链路海外广告推广方案,破解品牌出海难题

2026企业出海营销新趋势|传播易全链路海外广告推广方案,破解品牌出海难题

随着全球数字广告市场持续扩容,中国品牌出海进入高速增长、高质量发展双赛道。跨境贸易、跨境电商、国货全球化进程持续提速,企业海外品牌曝光、本地化引流、全域转化的需求全面爆发。但多数企业在出海推广过程中,普遍面临地域文化壁垒、媒体…

2026/7/16 15:51:02 阅读更多 →
仅限首批开放:Claude v3.5专属数据分析指令集(含12个已通过GDPR合规审计的Prompt模板)

仅限首批开放:Claude v3.5专属数据分析指令集(含12个已通过GDPR合规审计的Prompt模板)

更多请点击: https://kaifayun.com 第一章:Claude v3.5数据分析能力演进与合规边界界定 Claude v3.5 在结构化数据理解、多源异构表格推理及自然语言驱动的分析任务上实现了显著跃迁。其核心改进体现在对嵌套JSON、带缺失值的CSV片段、含合并单元格的Ex…

2026/7/16 15:49:01 阅读更多 →

日新闻

HarmonyOs应用《重要日》开发第6篇 - 数据持久化存储

HarmonyOs应用《重要日》开发第6篇 - 数据持久化存储

本篇深入剖析 ImportantDays 项目的数据持久化方案——基于 HarmonyOS ArkData 模块的 Preferences 轻量级存储,以及 PreferenceUtil 工具类的单例封装。一、HarmonyOS 数据存储方案对比 HarmonyOS 提供了多种数据存储方案:方案适用场景特点Preferences轻…

2026/7/16 0:08:27 阅读更多 →
Python实现跨境电商商品图批量翻译教程

Python实现跨境电商商品图批量翻译教程

一、问题引入做跨境电商的卖家朋友,你是否遇到过这样的困扰?每次上架新品到亚马逊、Shopee或Lazada等平台,都需要处理大量商品图片的多语言版本。比如上架200款衣服,每款需要翻译成英语、日语、韩语等5种语言,这意味着…

2026/7/16 0:08:27 阅读更多 →
鸿蒙 7 新特性实战①:从 0 到 1 掌握 @kit 标准导入规范

鸿蒙 7 新特性实战①:从 0 到 1 掌握 @kit 标准导入规范

从鸿蒙 7(HarmonyOS NEXT)开始,官方全面完成了从 ohos.* 零散模块到 kit.* 领域套件的体系重构。对开发者来说,第一道门槛不是 API 用法变化,而是统一的导入规范——旧体系默认导入、解构导入混用的混乱局面被彻底终结…

2026/7/16 0:10:29 阅读更多 →

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/15 21:09:01 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/15 19:42:20 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/15 17:52:08 阅读更多 →

月新闻