解决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。
解决
- 添加 commons-codec 依赖
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.6</version>
</dependency>
- 代码中引入
import org.apache.commons.codec.binary.Base64
- 替换原来的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。大家使用时按需调整。