mirror of
https://gitee.com/dromara/RuoYi-Vue-Plus.git
synced 2026-09-18 17:38:48 +08:00
add 添加解密经 @ApiEncrypt 加密后的接口请求/响应功能
This commit is contained in:
parent
ff7fc594d0
commit
ea39be41bc
@ -176,10 +176,12 @@ api-decrypt:
|
||||
headerFlag: encrypt-key
|
||||
# 响应加密公钥 非对称算法的公私钥 如:SM2,RSA 使用者请自行更换
|
||||
# 对应前端解密私钥 MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAmc3CuPiGL/LcIIm7zryCEIbl1SPzBkr75E2VMtxegyZ1lYRD+7TZGAPkvIsBcaMs6Nsy0L78n2qh+lIZMpLH8wIDAQABAkEAk82Mhz0tlv6IVCyIcw/s3f0E+WLmtPFyR9/WtV3Y5aaejUkU60JpX4m5xNR2VaqOLTZAYjW8Wy0aXr3zYIhhQQIhAMfqR9oFdYw1J9SsNc+CrhugAvKTi0+BF6VoL6psWhvbAiEAxPPNTmrkmrXwdm/pQQu3UOQmc2vCZ5tiKpW10CgJi8kCIFGkL6utxw93Ncj4exE/gPLvKcT+1Emnoox+O9kRXss5AiAMtYLJDaLEzPrAWcZeeSgSIzbL+ecokmFKSDDcRske6QIgSMkHedwND1olF8vlKsJUGK3BcdtM8w4Xq7BpSBwsloE=
|
||||
privateKeyResponse: MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAmc3CuPiGL/LcIIm7zryCEIbl1SPzBkr75E2VMtxegyZ1lYRD+7TZGAPkvIsBcaMs6Nsy0L78n2qh+lIZMpLH8wIDAQABAkEAk82Mhz0tlv6IVCyIcw/s3f0E+WLmtPFyR9/WtV3Y5aaejUkU60JpX4m5xNR2VaqOLTZAYjW8Wy0aXr3zYIhhQQIhAMfqR9oFdYw1J9SsNc+CrhugAvKTi0+BF6VoL6psWhvbAiEAxPPNTmrkmrXwdm/pQQu3UOQmc2vCZ5tiKpW10CgJi8kCIFGkL6utxw93Ncj4exE/gPLvKcT+1Emnoox+O9kRXss5AiAMtYLJDaLEzPrAWcZeeSgSIzbL+ecokmFKSDDcRske6QIgSMkHedwND1olF8vlKsJUGK3BcdtM8w4Xq7BpSBwsloE=
|
||||
publicKey: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJnNwrj4hi/y3CCJu868ghCG5dUj8wZK++RNlTLcXoMmdZWEQ/u02RgD5LyLAXGjLOjbMtC+/J9qofpSGTKSx/MCAwEAAQ==
|
||||
# 请求解密私钥 非对称算法的公私钥 如:SM2,RSA 使用者请自行更换
|
||||
# 对应前端加密公钥 MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdHnzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ==
|
||||
privateKey: MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKNPuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gAkM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWowcSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99EcvDQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthhYhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3UP8iWi1Qw0Y=
|
||||
publicKeyRequest: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdHnzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ==
|
||||
|
||||
springdoc:
|
||||
api-docs:
|
||||
|
||||
@ -21,6 +21,11 @@ public class ApiDecryptProperties {
|
||||
*/
|
||||
private String headerFlag;
|
||||
|
||||
/**
|
||||
* 响应加密私钥
|
||||
*/
|
||||
private String privateKeyResponse;
|
||||
|
||||
/**
|
||||
* 响应加密公钥
|
||||
*/
|
||||
@ -31,4 +36,9 @@ public class ApiDecryptProperties {
|
||||
*/
|
||||
private String privateKey;
|
||||
|
||||
/**
|
||||
* 请求解密公钥
|
||||
*/
|
||||
private String publicKeyRequest;
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,56 @@
|
||||
package org.dromara.system.controller.decrypt;
|
||||
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.system.domain.bo.SysDecryptBo;
|
||||
import org.dromara.system.domain.vo.SysDecryptVo;
|
||||
import org.dromara.common.encrypt.properties.ApiDecryptProperties;
|
||||
import org.dromara.common.encrypt.utils.EncryptUtils;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
/**
|
||||
* 请求/响应解密
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/tool/decrypt")
|
||||
public class SysDecryptController {
|
||||
|
||||
private final ApiDecryptProperties properties;
|
||||
|
||||
/**
|
||||
* 请求解密
|
||||
*/
|
||||
@PostMapping("/request")
|
||||
@SaCheckPermission("tool:decrypt:query")
|
||||
public R<SysDecryptVo> decryptRequest(@Validated @RequestBody SysDecryptBo bo) {
|
||||
String aesKey = EncryptUtils.decryptByRsa(bo.getEncryptKey(), properties.getPrivateKey());
|
||||
String data = EncryptUtils.decryptByAes(bo.getData(), EncryptUtils.decryptByBase64(aesKey));
|
||||
SysDecryptVo vo = new SysDecryptVo();
|
||||
vo.setAesKey(aesKey);
|
||||
vo.setData(data);
|
||||
return R.ok(vo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 响应解密
|
||||
*/
|
||||
@PostMapping("/response")
|
||||
@SaCheckPermission("tool:decrypt:query")
|
||||
public R<SysDecryptVo> decryptResponse(@Validated @RequestBody SysDecryptBo bo) {
|
||||
String aesKey = EncryptUtils.decryptByRsa(bo.getEncryptKey(), properties.getPrivateKeyResponse());
|
||||
String data = EncryptUtils.decryptByAes(bo.getData(), EncryptUtils.decryptByBase64(aesKey));
|
||||
SysDecryptVo vo = new SysDecryptVo();
|
||||
vo.setAesKey(aesKey);
|
||||
vo.setData(data);
|
||||
return R.ok(vo);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,21 @@
|
||||
package org.dromara.system.domain.bo;
|
||||
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class SysDecryptBo {
|
||||
|
||||
/**
|
||||
* AES 秘钥经 RSA 加密后的内容,对应 header 的 encrypt-key 值
|
||||
*/
|
||||
@NotEmpty(message = "encryptKey 不能为空")
|
||||
private String encryptKey;
|
||||
|
||||
/**
|
||||
* 待解密数据
|
||||
*/
|
||||
@NotEmpty(message = "待解密数据不能为空")
|
||||
private String data;
|
||||
|
||||
}
|
||||
@ -0,0 +1,18 @@
|
||||
package org.dromara.system.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class SysDecryptVo {
|
||||
|
||||
/**
|
||||
* 经 RSA 解密后的 AES 秘钥
|
||||
*/
|
||||
private String aesKey;
|
||||
|
||||
/**
|
||||
* 解密后的数据
|
||||
*/
|
||||
private String data;
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user