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

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();

            // 创建 RSAPrivateKeySpec
            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;
        }
    }

http://www.kler.cn/news/364874.html

相关文章:

  • 【AI服务器】全国产PCIe 5.0 Switch SerDes 测试和分析,以11槽PCIe GPU底板(PCIe 4.0/5.0)为例(二)
  • 【赵渝强老师】Oracle的联机重做日志文件与数据写入过程
  • 【等保测评】安全物理环境
  • 安全见闻笔记
  • 探索人工智能在自然语言处理中的应用
  • 数据库相关知识点
  • OpenCV KeyPoint与描述子编解码
  • 搭建你的第一个Spring Cloud Alibaba微服务
  • Java | Leetcode Java题解之第492题构造矩形
  • 论文引用收录证明有什么用?
  • vue2之混入(mixin)
  • python的接口自动化的测试与实现java监测jsp源代码Mysql
  • 【React系列二】—React学习历程的分享
  • 2024 JavaScript 入门教程:语法、算法与重要知识点详解
  • 查看linux的版本
  • 电影评论网站开发:Spring Boot技术指南
  • K最近邻算法
  • TinTin Web3 动态精选:Vitalik 探讨以太坊协议,Solana ETN 开启质押功能
  • 数造科技荣获2024DAMA中国“数据治理创新奖”
  • Lua repeat-until循环
  • UEFI BIOSAPP编程开发查询手册.pdf
  • 最后一周征稿!第四届计算机、物联网与控制工程国际学术会议(CITCE 2024)
  • 中国游戏产业趋势是什么?附2024趋势以及潜力分析报告
  • 如何使用JMeter进行性能测试的保姆级教程
  • Mac安装 TIDB并启动集群
  • sqlite数据库数据迁移到mysql