第一步、漏洞扫描工具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配置
第二步、更新Maven配置
第三步、升级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>
第四步、Java EE转Javarta EE
第五步、更新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
#执行命令
CMD exec java -Dapollo.enable=${apollo} -Denv=${ENV} --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服务器上上传解压的JDK17,获取解压路径;
第二步、在编译时指定编译JDK;