解决jdk版本不兼容导致的Base64加密问题java.lang.NoClassDefFoundError: sun/misc/BASE64Encoder

参考:https://blog.csdn.net/weixin_40052298/article/details/124896005

问题

使用MeterSphere测试平台进行自动化测试时,发现引入的一个第三方jar中的方法在执行时报错:

java.lang.NoClassDefFoundError: sun/misc/BASE64Encoder

原因

搜索之后发现 sun/misc/BASE64Encoder 这个东西仅在jdk1.8以及之前的版本存在,更高版本的jdk不存在了。 而MeterSphere(1.20lts)使用的jdk版本是jdk11。

解决

  1. 添加 commons-codec 依赖
<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.6</version>
</dependency>
  1. 代码中引入
import org.apache.commons.codec.binary.Base64
  1. 替换原来的BASE64Encoder()

3.1 加密部分
将:

BASE64Encoder base64encoder = new BASE64Encoder();
return base64encoder.encode(xxx);

替换为:

Base64.encodeBase64String(xxx);

3.2 解密部分
将:

new BASE64Decoder().decodeBuffer(xxx);

替换为:

Base64.decodeBase64(xxx);

注:Base64的加解密都有很多种返回值的方法,上文中加密返回的是String,解密返回的是Bytes。大家使用时按需调整。