Spring Boot 缓存与参数 AES 加密
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_faca7523/springboot-cache-aes。
技能介绍
要解决的问题
Spring Boot 业务接口常存在重复查询数据库的开销,但手写缓存容易遇到 key 规则不统一、参数明文暴露、Redis 序列化不一致等问题。这个技能针对这些点,给出一个基于 AOP + Redis 的缓存注解方案,并加入 AES 参数保护,适合作为内部服务接口缓存的起点。
技能如何工作
- 通过自定义注解
CacheDataAnnotation标记方法,由CacheDataAnnotationAop在方法执行前后完成缓存读取和写入。 - 支持三种 key 生成方式:固定 key、SpEL 表达式、类名方法名加 AES 参数摘要,优先级从高到低,便于在稳定 key 与动态参数之间切换。
- 方法参数会经过 AES 加密后再参与 key 或保护敏感信息,降低直接明文进入缓存 key 的风险。
- 配置项包括 Redis 连接、
RedisConfig序列化器、Maven 依赖和注解代码,按项目结构复制并修改包名即可使用。 - 空值默认不缓存,避免把
null当作有效业务结果写入;需要缓存空值时要自行调整 AOP 逻辑。
适用边界与注意点
- 缓存对象必须可序列化,建议优先使用
String、基本类型包装类、List、Map等简单结构。 - SpEL 依赖参数名,编译时建议保留
-parameters;方法必须是public、非static,且通过 Spring 容器调用,自调用不会触发 AOP。 - 生产环境需要配置 Redis 连接池、合理过期时间、key 前缀,并对热点数据做预热或失效策略。
- 对可能返回
null的查询,需要结合空值缓存、参数校验或布隆过滤器来减少缓存穿透。
使用场景
- 在 Spring Boot 服务中为查询接口加缓存,并用 SpEL 按用户 ID 动态生成 key
- 把业务方法的参数纳入缓存 key 前,先做 AES 加密,避免敏感参数明文暴露
- 用 AOP 注解统一管理 Redis 缓存读写,并处理可序列化返回值和空值不缓存
- 上线前检查 SpEL 参数名、public 非 static 方法及 Spring 容器调用等 AOP 生效条件
适合人员
- 维护 Spring Boot 后端接口的 Java 工程师,需要给查询方法加 Redis 缓存并控制 key 规则
- 负责内部服务安全与脱敏的后端工程师,要求方法参数不直接明文出现在缓存 key 中
- 使用 Redis 做业务缓存的平台工程师,需要统一 AOP 注解、序列化配置和空值处理策略
- 接手旧项目缓存模块的技术负责人,想检查 SpEL 使用、AOP 自调用和序列化问题