# rain-springboot3 **Repository Path**: rain_jj/rain-springboot3 ## Basic Information - **Project Name**: rain-springboot3 - **Description**: 基于springboot3+jdk17的demo - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-15 - **Last Updated**: 2025-11-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Spring Boot 3 加密示例项目 这是一个基于 Spring Boot 3 的示例项目,演示了如何在应用程序中实现敏感数据的加密和解密功能。 ## 功能特性 - 敏感数据自动加密/解密 - 使用 AES 加密算法 - 支持通过注解对字段进行加密 - 提供加密拦截器和切面 - 支持批量解密操作 - 集成 MyBatis Plus 和 Redis ## 模块结构 - **encryption**: 完整的加密解决方案模块 - 加密策略模式实现 - SpEL 表达式解析工具 - 数据库加密拦截器 - Redis 集成配置 - 批量解密助手 🔐 加密流程 1. 对象遍历 遍历目标对象的所有字段,筛选出标注了 @EncryptField 注解的字段。 2. 脱敏处理 若字段同时标注了脱敏注解(如 @Desensitize),则解析脱敏配置,提取前缀/后缀保留规则等信息。 3. 数据检查 检查当前明文内容是否已在敏感数据表中存在,避免重复加密,节省资源。 4. 加密执行 根据字段或全局配置,调用对应的 EncryptionStrategy 实现类,对明文执行加密操作。 5. 数据存储 将加密后的密文及元信息(如算法类型、创建时间等)持久化存储至敏感数据表。 6. 缓存处理(可选) 若系统启用缓存机制,将明文数据缓存起来,供后续解密时快速读取。 7. 字段替换 将原对象中该字段的值替换为数据库中存储的敏感数据唯一ID(如 SENSITIVE_123456)。 🔓 解密流程 1. 对象遍历 遍历目标对象所有字段,筛选出标注了 @EncryptField 注解的字段。 2. 缓存查找(优先) 根据字段值(敏感数据ID)尝试从缓存中获取对应的明文数据。 3. 数据库查询(缓存未命中) 若缓存无数据,则根据敏感数据ID查询数据库,获取加密内容及算法信息。 4. 解密执行 使用与加密时相同的算法策略(通过 EncryptionStrategy)对密文进行解密。 5. 缓存更新(可选) 若启用缓存,将解密得到的明文写入缓存,提升后续访问效率。 6. 字段替换 将对象中该字段的值替换为解密后的明文内容。 🧩 设计模式分析 1. 策略模式 (Strategy Pattern) 应用:EncryptionStrategy 接口及其实现类(如 AesStrategy, RsaStrategy) 说明:不同加密算法实现统一接口,运行时动态选择。 优势:易于扩展新算法,符合开闭原则(OCP)。 2. 工厂模式 (Factory Pattern) 应用:EncryptFactory 及其子工厂 说明:根据注解或配置创建具体的加密策略实例。 优势:解耦对象创建与使用,提升可维护性和可测试性。 3. 模板方法模式 (Template Method Pattern) 应用:AbstractSliderDesensitizationHandler 等抽象处理器 说明:定义脱敏处理骨架(如“保留前N后M”),具体实现由子类完成。 优势:复用公共流程,减少重复代码,便于统一变更。 ## 使用示例 ### 启动应用 ```bash mvn spring-boot:run ``` ### 用户管理 API #### 创建用户 ```http POST /api/users Content-Type: application/json { "username": "string", "password": "string", "phone": "string", "idCard": "string", "tenantCode": "string", "version": "string" } ``` #### 获取用户 ```http GET /api/users/{id} ``` 返回示例: ```json { "id": 0, "username": "string", "phone": "string", "idCardDesensitized": "string", "createTime": "2023-09-01T00:00:00.000Z" } ``` ## 配置要求 请在 application.properties 或 application.yml 中配置以下内容: - 加密密钥:`encryption.aes.iv` 和 `encrypt.secret` - 数据库连接信息 - Redis 连接信息 ## 贡献指南 欢迎贡献代码,请遵循以下步骤: 1. Fork 仓库 2. 创建新分支 3. 提交代码更改 4. 创建 Pull Request ## 许可证 本项目采用 MIT 许可证。详见 LICENSE 文件。