当前位置: 首页 > news >正文

java编译[WARNING]告警处理

一、sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl

[WARNING] HttpUtils.java:[37,46] sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl是内部专用 API, 可能会在未来发行版中删除

1、避免使用内部 API:

尽量使用 Java 标准库提供的公开 API 来替代内部 API。如果可以找到一个更合适的替代方案,尽量不要依赖 sun.* 的包。

2、使用 java.lang.reflect 包:

在大多数情况下,可以使用 java.lang.reflect 包中的类来处理反射和泛型。例如,ParameterizedType 是一个标准 API,通常可以用来替代 ParameterizedTypeImpl。

修改前:

import sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl;Class<?> elementType = TypeUtil.getClass(((ParameterizedTypeImpl) field.getGenericType()).getActualTypeArguments()[0]);

修改后:

import java.lang.reflect.ParameterizedType;Class<?> elementType = TypeUtil.getClass(((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0]);

二、sun.net.util.IPAddressUtil

[WARNING] FormatUtil.java:[17,20] sun.net.util.IPAddressUtil是内部专用 API, 可能会在未来发行版中删除

1、使用公开 API:

尽量使用 Java 提供的标准 API,特别是关于网络和 IP 地址的功能,java.net.InetAddress 类就是一个合适的替代选择。

修改前:

import sun.net.util.IPAddressUtil;
// 校验ipv6
(IPAddressUtil.isIPv6LiteralAddress(split[0])

修改后:

import java.net.InetAddress;public static boolean isIPv6LiteralAddress(String ipAddress) {try {InetAddress inetAddress = InetAddress.getByName(ipAddress);return inetAddress instanceof java.net.Inet6Address;} catch (UnknownHostException e) {// 地址无效return false;}
}
// 使用此方法校验ipv6
isIPv6LiteralAddress(split[0]))

三、has been relocated to

[WARNING] The artifact mysql:mysql-connector-java:jar:8.0.31 has been relocated to com.mysql:mysql-connector-j:jar:8.0.31
The artifact org.hibernate:hibernate-validator:jar:6.0.8.Final has been relocated to org.hibernate.validator:hibernate-validator:jar:6.0.8.Final

1、警告表明一些 Maven 依赖项已经被重定向到新的坐标。需要在 pom.xml 文件中更新相关的依赖项。

修改前:

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.31</version>
</dependency>
<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>6.0.8.Final</version>
</dependency>

修改后:

<dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.31</version>
</dependency>
<dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId><version>6.0.8.Final</version>
</dependency>

四、sun.security.util.DerValue

[WARNING] CertUtil.java:[7,25] sun.security.util.DerValue是内部专用 API, 可能会在未来发行版中删除

1、sun.security.util.DerInputStream 是一个内部专用 API,通常不推荐直接使用,因为它可能在不同的 Java 版本中发生变化,导致兼容性问题。
2、使用 Bouncy Castle 解析 DER 数据,避免使用内部 API。
修改前:

public PrivateKey getPrivateKey(String privateKeyFilePath) {try {File privateKeyFile = new File(privateKeyFilePath);Path path = Paths.get(privateKeyFile.getAbsolutePath());String privateKeyPem = new String(Files.readAllBytes(path));privateKeyPem = privateKeyPem.replace(PEM_RSA_PRIVATE_START, "").replace(PEM_RSA_PRIVATE_END, "");privateKeyPem = privateKeyPem.replaceAll("\\s", "");DerInputStream derReader = new DerInputStream(Base64.getDecoder().decode(privateKeyPem));DerValue[] seq = derReader.getSequence(0);if (seq.length < 9) {throw new GeneralSecurityException("Could not parse a PKCS1 private key.");}// skip version seq[0];BigInteger modulus = seq[1].getBigInteger();BigInteger publicExp = seq[2].getBigInteger();BigInteger privateExp = seq[3].getBigInteger();BigInteger prime1 = seq[4].getBigInteger();BigInteger prime2 = seq[5].getBigInteger();BigInteger exp1 = seq[6].getBigInteger();BigInteger exp2 = seq[7].getBigInteger();BigInteger crtCoef = seq[8].getBigInteger();RSAPrivateCrtKeySpec keySpec = new RSAPrivateCrtKeySpec(modulus, publicExp, privateExp, prime1, prime2, exp1, exp2, crtCoef);KeyFactory factory = KeyFactory.getInstance("RSA");return factory.generatePrivate(keySpec);} catch (Exception e) {log.error(e.getMessage());return null;}}

修改后:

static {// 注册 Bouncy Castle 提供者Security.addProvider(new BouncyCastleProvider());}public PrivateKey getPrivateKey(String privateKeyFilePath) {try {File privateKeyFile = new File(privateKeyFilePath);Path path = Paths.get(privateKeyFile.getAbsolutePath());String privateKeyPem = new String(Files.readAllBytes(path));privateKeyPem = privateKeyPem.replace(PEM_RSA_PRIVATE_START, "").replace(PEM_RSA_PRIVATE_END, "");privateKeyPem = privateKeyPem.replaceAll("\\s", "");// 解析 DER 格式的私钥byte[] derBytes = Base64.getDecoder().decode(privateKeyPem);RSAPrivateKey rsaPrivateKey = RSAPrivateKey.getInstance(derBytes);// 获取 RSA 私钥的参数BigInteger modulus = rsaPrivateKey.getModulus();BigInteger publicExp = rsaPrivateKey.getPublicExponent();BigInteger privateExp = rsaPrivateKey.getPrivateExponent();BigInteger prime1 = rsaPrivateKey.getPrime1();BigInteger prime2 = rsaPrivateKey.getPrime2();BigInteger exp1 = rsaPrivateKey.getExponent1();BigInteger exp2 = rsaPrivateKey.getExponent2();BigInteger crtCoef = rsaPrivateKey.getCoefficient();// 创建 RSAPrivateKeySpecRSAPrivateCrtKeySpec keySpec = new RSAPrivateCrtKeySpec(modulus, publicExp, privateExp, prime1, prime2, exp1, exp2, crtCoef);KeyFactory factory = KeyFactory.getInstance("RSA");return factory.generatePrivate(keySpec);} catch (Exception e) {log.error(e.getMessage());return null;}}

http://www.mrgr.cn/news/58404.html

相关文章:

  • h5页面与小程序页面互相跳转
  • 由于导出的数据名字中带有/,导致Matlab打不开,怎么办?
  • 大数据生态守护:Hadoop的深度保护策略
  • C/C++下读取ENVI栅格文件格式
  • MongoDB安装配置及配置和启动服务
  • 一款开箱即用的中后台和前后端分离后台管理系统框架,支持PC端,小程序端(带私活源码)
  • 内存中划分的四个主要区域
  • 为什么使用 toFixed 方法的结果不一致呢?
  • 什么品牌的台灯护眼比较好?五款性能与品质兼并的护眼台灯分享
  • 2024年双十一有什么好物推荐?盘点2024双十一爆款好物分享
  • Nature 正刊丨阻断翻译的mRNA ADP核糖基转移酶的抗病毒防御
  • 中小企业设备管理数字化转型:Spring Boot实现
  • cpp的string类
  • 如何对网络设备进行监控:以监控易平台为例
  • 对数平均温差计算
  • 文档透明加密系统怎么用?五款透明加密软件汇总!2024热门推荐,实测分享!
  • Pytest-Bdd-Playwright 系列教程(2):支持在多浏览器、多环境中执行测试
  • 大语言模型训练方式探索(基于llma3模型)
  • 使用docker-compose部署一个springboot项目(包含Postgres\redis\Mongo\Nginx等环境)
  • java中this的内存原理是?
  • 伦敦银是24小时交易吗?
  • 《证据规定》之鉴定人拒不出庭的法律后果
  • 100 个常见网络基础知识普及
  • 爱回收品牌ID查询接口技术实现与代码示例
  • 雷池社区版有多个防护站点监听在同一个端口上,匹配顺序是怎么样的
  • 病毒分析-SysTracer工具监控进行行为