当前位置:   article > 正文

如何优雅的实现 Spring Boot 接口参数加密解密?_springboot base64加密

springboot base64加密

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

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

所以今天这篇文章有两个目的:

  • 分享参数/响应加解密的思路。

  • 分享 ResponseBodyAdvice 和 RequestBodyAdvice 的用法。

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

1.开发加解密 starter

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

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

  1. <dependency>
  2.     <groupId>org.springframework.boot</groupId>
  3.     <artifactId>spring-boot-starter-web</artifactId>
  4.     <scope>provided</scope>
  5.     <version>2.4.3</version>
  6. </dependency>

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

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

  1. public class AESUtils {
  2.     private static final String AES_ALGORITHM = "AES/ECB/PKCS5Padding";
  3.     // 获取 cipher
  4.     private static Cipher getCipher(byte[] key, int model) throws Exception {
  5.         SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
  6.         Cipher cipher = Cipher.getInstance(AES_ALGORITHM);
  7.         cipher.init(model, secretKeySpec);
  8.         return cipher;
  9.     }
  10.     // AES加密
  11.     public static String encrypt(byte[] data, byte[] key) throws Exception {
  12.         Cipher cipher = getCipher(key, Cipher.ENCRYPT_MODE);
  13.         return Base64.getEncoder().encodeToString(cipher.doFinal(data));
  14.     }
  15.     // AES解密
  16.     public static byte[] decrypt(byte[] data, byte[] key) throws Exception {
  17.         Cipher cipher = getCipher(key, Cipher.DECRYPT_MODE);
  18.         return cipher.doFinal(Base64.getDecoder().decode(data));
  19.     }
  20. }

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

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

  1. public class RespBean {
  2.     private Integer status;
  3.     private String msg;
  4.     private Object obj;
  5.     public static RespBean build() {
  6.         return new RespBean();
  7.     }
  8.     public static RespBean ok(String msg) {
  9.         return new RespBean(200, msg, null);
  10.     }
  11.     public static RespBean ok(String msg, Object obj) {
  12.         return new RespBean(200, msg, obj);
  13.     }
  14.     public static RespBean error(String msg) {
  15.         return new RespBean(500, msg, null);
  16.     }
  17.     public static RespBean error(String msg, Object obj
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/618971
推荐阅读
相关标签
  

闽ICP备14008679号