一次项目漏洞升级的过程(JDK8升级到JDK17)

这篇具有很好参考价值的文章主要介绍了一次项目漏洞升级的过程(JDK8升级到JDK17)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

准备工作:

第一步、漏洞扫描工具trivy;
第二步、扫描后的漏洞存在镜像漏洞,中间件漏洞和代码jar包漏洞;
第三步、区分对外和不对外的服务,先更新对外服务;
第四步、找出一个对外服务需要升级的jar
1、spring-web需要升级到6.x,spring-boot需要升级到3.x,JDK需要升级到JDK17(Oracle JDK17三年免费授权从2021年9月到2024年9月,现在已经2024年了,所以需要使用OpenJDK17),Java EE转Jakarta;因为使用了OpenJdk17,cglib代理在2019年8月停止更新,OpenJDK17是2019年9月出来的,也不支持需要修改;
第五步、OpenJDK17需要使用IDEA2022.x才行,升级IDEA;
第六步、下载OpenJDK17

开始处理

第一步、升级OpenJDK(解压好就可以了);
第二步、更新IDEA的JDK配置
一次项目漏洞升级的过程(JDK8升级到JDK17),java
一次项目漏洞升级的过程(JDK8升级到JDK17),java
一次项目漏洞升级的过程(JDK8升级到JDK17),java
一次项目漏洞升级的过程(JDK8升级到JDK17),java
第二步、更新Maven配置
一次项目漏洞升级的过程(JDK8升级到JDK17),java
一次项目漏洞升级的过程(JDK8升级到JDK17),java
第三步、升级Jar包,根据具体使用到的jar更新

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.0.13</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
<dependency>
            <groupId>jakarta.annotation</groupId>
            <artifactId>jakarta.annotation-api</artifactId>
            <version>2.1.1</version>
        </dependency>
        <dependency>
            <groupId>jakarta.faces</groupId>
            <artifactId>jakarta.faces-api</artifactId>
            <version>3.0.0</version> <!-- 使用适当的版本号 -->
        </dependency>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId>
            <version>4.0.2</version>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-core</artifactId>
            <version>4.0.2</version>
        </dependency>

使用了lombok,可能需要升级,否则编译报错

<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.28</version>
            <optional>true</optional>
        </dependency>

Spring-boot 3.x已经不使用WebMvcConfigurerAdapter实现MVC定制,需要替换为WebMvcConfigurer,可以继承WebMvcConfigurationSupport

使用的HandlerInterceptorAdapter可能不能使用,可以实现HandlerInterceptor代替

使用了Swagger2,需要移除,swagger2使用javax.servlet.http.HttpServletRequest,会出现Type javax.servlet.http.HttpServletRequest not present错误,OpenJDK17使用Jakarta;替换为

        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
            <version>2.0.2</version>
        </dependency>
<!--        <dependency>-->
<!--            <groupId>io.springfox</groupId>-->
<!--            <artifactId>springfox-swagger2</artifactId>-->
<!--            <version>3.0.0</version>-->
<!--        </dependency>-->
<!--        <dependency>-->
<!--            <groupId>io.springfox</groupId>-->
<!--            <artifactId>springfox-swagger-ui</artifactId>-->
<!--            <version>2.9.2</version>-->
<!--        </dependency>-->
@Configuration
public class Swagger3Configuration {
    /**
     * 版本
     */
    private static final String VERSION = "1.0.0";

    private static final String TITLE = "Tracker-API";

    private static final String DESCRIPTION = "Tracker-API接口文档";

    @Bean
    public OpenAPI springOpenAPI() {
        return new OpenAPI().info(new Info()
                .title(TITLE)
                .description(DESCRIPTION)
                .version(VERSION));
    }
}

标签替换,使用IDEA的批量替换功能,根据项目实际情况调整,可以删除一些不知道的属性

@Api(tags = "")@Tag(name = "")
@ApiIgnore→或@Parameter(hidden = true)@Operation(hidden = true)@Hidden
@ApiImplicitParam@Parameter
@ApiParam@Parameter
@ApiImplicitParams@Parameters
@ApiModel(value = "", description= "")@Schema(name= "", description= "")
@ApiModelProperty(value = "", required = true, hidden = true)@Schema(name= "", required = true, accessMode = READ_ONLY)
@ApiOperation(value = "", notes = "")@Operation(summary = "", description = "")
@ApiResponse(code = 404, message = "")@ApiResponse(responseCode = "404", description = "")

第四步、Java EE转Javarta EE
一次项目漏洞升级的过程(JDK8升级到JDK17),java
第五步、更新Cglib

<dependency>
            <groupId>net.bytebuddy</groupId>
            <artifactId>byte-buddy-agent</artifactId>
            <version>1.14.11</version>
        </dependency>
        <dependency>
            <groupId>net.bytebuddy</groupId>
            <artifactId>byte-buddy</artifactId>
            <version>1.14.11</version>
        </dependency>
 inst = new ByteBuddy()
 						//以前cglib代理类
                        .subclass(代理类.class)
                        .method(ElementMatchers.any())
                        //以前cglib代理方法,proxy就是代理对象
                        .intercept(InvocationHandlerAdapter.of((proxy, method, args) -> intercept(proxy, method, args)))
                        .make()
                        .load(MyJedis.class.getClassLoader(), ClassLoadingStrategy.Default.INJECTION)
                        .getLoaded().newInstance();

制作镜像

第一步、制作基础镜像
选择的是alpine

#执行命令 
docker pull alpine
#查看镜像,一般是最前面一个
docker images
#登录镜像
docker run -it 镜像ID /bin/sh
#更新安装包
apk update
# 安装OpenJDK等
apk add openjdk17 busybox tzdata curl
#安装/bin/bash
apk add bash
#从新打开一个窗口,把容器打包成镜像
docker commit 容器ID xxx.xxx.xxx:alpine-openjdk17-base
#上传镜像
docker push 域名:/位置

第二步、更新Dockerfile文件

#获取基础镜像
FROM 域名:/位置/alpine-openjdk17-base
#设置环境变量
ENV JVM_OPTS -Xms1024m -Xmx1024m
ENV application xxxxx
ENV apollo false
#从根目录创建文件夹名称
RUN mkdir -p /app/$application/conf
COPY target/$application /app/$application
WORKDIR /app/$application
#执行命令,在反射时,会抛出模块等异常,需要加入add-opens参数
CMD exec java -Dapollo.enable=${apollo} -Denv=${ENV} --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/sun.nio.cs=ALL-UNNAMED $JAVA_OPTS $JVM_OPTS -jar -Xbootclasspath/a:conf xxxxx.jar

如果存在-XX:+UseConcMarkSweepGC JVM参数,需要移除,JDK17已经没有这个垃圾回收器了;

使用了.gitlab-ci.yml需要更新文件,指定JDK版本

第一步、在GitLab服务器上上传解压的JDK17,获取解压路径;
第二步、在编译时指定编译JDK;
一次项目漏洞升级的过程(JDK8升级到JDK17),java

流水线打包

一次项目漏洞升级的过程(JDK8升级到JDK17),java

镜像发布

一次项目漏洞升级的过程(JDK8升级到JDK17),java文章来源地址https://www.toymoban.com/news/detail-809308.html

到了这里,关于一次项目漏洞升级的过程(JDK8升级到JDK17)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java jdk8和jdk17同时存在【环境配置】

    jdk8:https://www.oracle.com/cn/java/technologies/javase/javase8u211-later-archive-downloads.html jdk17:https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html PS:jdk8在下载结束,安装的时候,需要有两个文件分别是jre和jdk JRE: 是Java Runtime Environment,是java程序的运行环境。既然是运行,当然要包含

    2024年02月07日
    浏览(46)
  • IDEA构建springBoot新项目时JDK只有17和21,无法选择JDK8解决方案

    今天创建springboot新项目时,发现IDEA里JDK选项只有17和21,无法选择本机的JDK8,网上查资料后发现是springboot2.7于11.24号后停止维护,基于2.7和java8的spring Initializ官方不再维护,解决方案是在server URL栏,改start.spring.io为阿里源:https://start.aliyun.com/

    2024年01月17日
    浏览(39)
  • Mac卸载jdk8,安装jdk17

    本次操作基于MacBook 因为工作需要,需要将jdk版本由jdk8升级到jdk17,同一台机器上是可以同时安装多个版本的jdk的,但是为了避免一些冲突和未知问题,这里直接卸载旧版本jdk,然后再重新安装新版本。 先查看本机安装的jdk: 删除java运行环境: 到java的目录,用ls命令查看机

    2024年02月08日
    浏览(46)
  • JDK8 升级至JDK19

    优质博文IT-BLOG-CN 目前部分项目使用 JDK8 ,部分项目使用 JDK19 因此,环境变量中还是保持 JDK8 ,只需要下载 JDK19 免安装版本,通过配置 IDEA 就可以完成本地开发。 【1】通过快捷键 CTRL + SHIFT + ALT + S 或者 File-Project Structure... 设置 SDK 和 Language level ,不存在 JDK19 时可通过 Edit

    2024年02月19日
    浏览(27)
  • SpringBoot2.7升级项目到Springboot3.1踩坑指南(jdk17/jdk21)

    由于SpringBoot3.x全面拥抱JDK17,兼容jdk21,jdk17乃是大势所趋。这里是从SpringBoot2.7--SpringBoot3.1踩坑指南。 提前阅读:jdk8升级JDK17避坑指南(适用于SpringBoot2.3—SpringBoot2.7升级) 国内顶级开源项目升级到springBoot3情况,可以作为升级SpringBoot3的风向标。仅对比国内规模使用,落地过

    2024年03月09日
    浏览(56)
  • Java升级JDK17(更高版本同理),修改maven

    记住三个网址就行:下面这个是oracle的 Java Platform, Standard Edition 17 ReferenceImplementations https://www.oracle.com/java/technologies/downloads/#jdk17-windows 另外一个 redhat旗下的:这个是开源的(推荐这个!) Red Hat build of OpenJDK Download | Red Hat Developer 找到想要的版本下载即可 注意:JDK9的时候,

    2024年02月11日
    浏览(43)
  • JDK8和JDK17安装切换,IDEA配置多个版本JDK

    JAVA之父高斯林推荐我们用JDK17,请尽快离开JDK8。JDK17 LTS在每个维度上都是一个巨大的飞跃: 在Java 17正式发布之前,Java开发框架Spring率先在官博宣布,Spring Framework 6和Spring Boot 3计划在2022年第四季度实现总体可用性的高端基线: Java 17+(来自 Spring Framework 5.3.x 线中的 Java 8-17)

    2023年04月27日
    浏览(40)
  • JDK8,JDK11,JDK17,JDK21及中间版本主要更新特性

    官方地址: https://www.oracle.com/java/technologies/java-se-support-roadmap.html 从上图可以很清晰得可以看出,JDK7,JDK8,JDK11,JDK17,JDK21是长期维护的版本。从目前来看,JDK8到2023年已经有将近10年的历史了,大多数依据JDK8的相关技术内容已经很成熟了,但是大家也看到,JDK在不断地迭代,JD

    2024年02月21日
    浏览(44)
  • JDK8到JDK17有哪些吸引人的新特性?

    作者:京东零售 刘一达 2006年之后SUN公司决定将JDK进行开源,从此成立了OpenJDK组织进行JDK代码管理。任何人都可以获取该源码,并通过源码构建一个发行版发布到网络上。但是需要一个组织审核来确保构建的发行版是有效的, 这个组织就是JCP(Java Community Process)。2009年,SUN公

    2023年04月18日
    浏览(38)
  • JDK8升级JDK11最全实践干货来了

    截至目前(2023年),Java8发布至今已有9年,2018年9月25日,Oracle发布了Java11,这是Java8之后的首个LTS版本。那么从JDK8到JDK11,到底带来了哪些特性呢?值得我们升级吗?而且升级过程会遇到哪些问题呢?带着这些问题,本篇文章将带来完整的JDK8升级JDK11最全实践。 1)性能提升

    2024年02月08日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包