Spring Boot REST接口加解密需在不侵入业务代码前提下,通过RequestBodyAdvice和ResponseBodyAdvice实现请求前自动解密、响应前自动加密,且仅对@RequestBody+@ResponseBody/RestController+JSON格式生效。

Spring Boot 中对 REST 接口参数加解密,核心是**不侵入业务代码的前提下,在请求进入 Controller 前自动解密、响应返回前自动加密**。这主要依赖 Spring MVC 提供的两个全局拦截接口:RequestBodyAdvice(处理请求体)和 ResponseBodyAdvice(处理响应体),配合合适的加密算法即可实现统一加解密。
必须满足的前提条件
加解密功能只对符合特定规范的接口生效,否则拦截器不会触发:
- 请求方法必须使用
@RequestBody注解接收参数(不能是@RequestParam、@PathVariable或表单提交) - 控制器方法必须标注
@ResponseBody或使用@RestController(否则ResponseBodyAdvice不生效) - 加解密逻辑默认作用于 JSON 格式请求/响应(Content-Type: application/json)
常用加解密方式选型与适用场景
根据安全等级、性能要求和密钥管理能力选择合适算法:
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- AES(推荐首选):对称加密,速度快、适合高频数据传输;需双方共享密钥,适合前后端固定配对场景(如 App 与自有后台)
- RSA / SM2:非对称加密,公钥加密、私钥解密;适合密钥分发或混合加密(如用 RSA 加密 AES 密钥);但性能低,不宜直接加密大段 JSON
- SM4:国密算法,合规性要求高(如金融、政务系统)时优先选用,原理和 AES 类似
- BASE64:仅编码,不是加密,不可用于安全防护,仅作临时调试或透传兼容用
快速集成方案(推荐 starter 方式)
避免重复造轮子,可直接引入成熟封装库:
- Maven 引入:
<dependency><br> <groupId>com.gitee.hzhh123</groupId><br> <artifactId>spring-boot-interface-crypto-starter</artifactId><br> <version>1.0.1</version><br> </dependency>
- 配置加密类型与密钥(application.yml):
crypto:<br> configs:<br> - type: aes<br> key: 2691b31aa11bee4b62c05537aa67558a # 16字节 AES-128 密钥<br> - type: rsa<br> public-key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC...<br> private-key: MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAK... - 启用自动配置后,所有带
@RequestBody和@ResponseBody的接口即默认启用加解密
自定义加解密逻辑(灵活控制)
若需细粒度控制(如按 URL 路径、Header 标识或注解开关),可继承标准 Advice:
- 实现
RequestBodyAdvice,重写supports()控制生效范围,beforeBodyRead()中对HttpInputMessage的 body 字节数组解密 - 实现
ResponseBodyAdvice,重写beforeBodyWrite(),将序列化前的 Object 或 byte[] 加密后替换为密文字符串 - 示例判断逻辑:
若请求 Header 中含X-Encrypted: true,才执行解密;
若响应对象是Result>类型且状态为 success,才加密 data 字段

















