java注解加密参数,如何优雅的实现 Spring Boot 接口参数加密解密?

因为有小伙伴刚好问到这个问题,松哥就抽空撸一篇文章和大家聊聊这个话题。

加密解密本身并不是难事,问题是在何时去处理?定义一个过滤器,将请求和响应分别拦截下来进行处理也是一个办法,这种方式虽然粗暴,但是灵活,因为可以拿到一手的请求参数和响应数据。不过 SpringMVC 中给我们提供了 ResponseBodyAdvice 和 RequestBodyAdvice,利用这两个工具可以对请求和响应进行预处理,非常方便。

所以今天这篇文章有两个目的:分享参数/响应加解密的思路。

分享 ResponseBodyAdvice 和 RequestBodyAdvice 的用法。

好了,那么接下来就不废话了,我们一起来看下。

1.开发加解密 starter

为了让我们开发的这个工具更加通用,也为了复习一下自定义 Spring Boot Starter,这里我们就将这个工具做成一个 stater,以后在 Spring Boot 项目中直接引用就可以。

首先我们创建一个 Spring Boot 项目,引入 spring-boot-starter-web 依赖:

org.springframework.boot

spring-boot-starter-web

provided

2.4.3

因为我们这个工具是为 Web 项目开发的,以后必然使用在 Web 环境中,所以这里添加依赖时 scope 设置为 provided。

依赖添加完成后,我们先来定义一个加密工具类备用,加密这块有多种方案可以选择,对称加密、非对称加密,其中对称加密又可以使用 AES、DES、3DES 等不同算法,这里我们使用 Java 自带的 Cipher 来实现对称加密,使用 AES 算法:public class AESUtils {

private static final String AES_ALGORITHM = "AES/ECB/PKCS5Padding";

// 获取 cipher

private static Cipher getCipher(byte[] key, int model) throws Exception {

SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");

Cipher cipher = Cipher.getInstance(AES_ALGORITHM);

cipher.init(model, secretKeySpec);

return cipher;

}

// AES加密

public static String encrypt(byte[] data, byte[] key) throws Exception {

Cipher cipher = getCipher(key, Cipher.ENCRYPT_MODE);

return Base64.getEncoder().encodeToString(cipher.doFinal(data));

}

// AES解密

public static byte[] decrypt(byte[] data, byte[] key) throws Exception {

Cipher cipher = getCipher(key, Cipher.DECRYPT_MODE);

return cipher.doFinal(Base64.getDecoder().decode(data));

}

}

这个工具类比较简单,不需要多解释。需要说明的是,加密后的数据可能不具备可读性,因此我们一般需要对加密后的数据再使用 Base64 算法进行编码,获取可读字符串。换言之,上面的 AES 加密方法的返回值是一个 Base64 编码之后的字符串,AES 解密方法的参数也是一个 Base64 编码之后的字符串,先对该字符串进行解码,然后再解密。

接下来我们封装一个响应工具类备用,这个大家如果经常看松哥视频已经很了解了:public class RespBean {

private Integer status;

private String msg;

private Object obj;

public static RespBean build() {

return new RespBean();

}

public static RespBean ok(String msg) {

return new RespBean(200, msg, null);

}

public static RespBean ok(String msg, Object obj) {

retu

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值