前端不显示验证码图片

首先检查网络问题,网络正常。

打开控制台,发现验证码图片对应的响应状态码为500,是服务端的问题

由于服务端是将 jar 包通过 docker 部署的,所以通过

docker logs -f container_id

查看日志,发现验证码正确生成了,但是在 docker 容器中缺少图形化界面,不能正确加载验证码对应的字体(找不到对应的类)

原因:

1)在使用 kaptcha 库生成验证码的时候。kaptcha 使用了 AWT 来生成图像,而 Spring Boot 应用是在没有图形环境的情况下运行(例如在 Docker 容器中)时,这时尝试了加载图形组件。(解决方案是在 java 启动参数中添加参数 "-Djava.awt.headless=true",采用 headless 模式运行 java 应用 )

2)镜像里面没有验证码对应的字体

解决方案:

1)设置 Java 启动时为 headless 模式,以避免尝试加载不必要的图形组件。

2)在镜像中下载常用的字体包

修改 dockerfile 文件如下:

# 使用 Maven 镜像构建应用
FROM maven:3.8.5-openjdk-11 AS build
WORKDIR /app

# 将 Maven 配置文件复制到容器中
COPY pom.xml .
COPY src ./src

# 构建项目并打包
RUN mvn clean package -DskipTests

# 使用 OpenJDK 运行应用
FROM openjdk:11-jre-slim
# 更换 Debian 源为清华大学镜像
RUN sed -i 's|http://deb.debian.org/debian|http://mirrors.tuna.tsinghua.edu.cn/debian|g' /etc/apt/sources.list
# 更新并安装 fontconfig 和常用字体
RUN apt-get update && \
    apt-get install -y --no-install-recommends fontconfig fonts-dejavu fonts-noto && \
    apt-get clean && rm -rf /var/lib/apt/lists/*

WORKDIR /app
# 将构建的 jar 文件复制到运行环境中
COPY --from=build /app/target/computerstore-0.0.1-SNAPSHOT.jar app.jar

# 暴露应用运行端口
EXPOSE 8086

# 启动 Spring Boot 应用
ENTRYPOINT ["java", "-Djava.awt.headless=true", "-jar", "app.jar"]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值