解决若依ruoyi项目部署到服务器验证码接口报错的问题

news2024/11/17 9:12:47

这里写目录标题

  • ruoyi-vue项目部署到服务器验证码接口报500的解决方案
    • 问题回顾
    • 报错信息
    • 分析和解决方案
      • 解决方案

ruoyi-vue项目部署到服务器验证码接口报500的解决方案

问题回顾

最近手上有个项目是基于ruoyi-vue开发的,本地运行的好好地,一部署到服务器上,运行成功,一访问就发现验证码接口报错!!!就有了如下画面:
测试:验证码怎么不显示?报错了呀!
你:😳纳尼?我本地好好的呀,什么也没改怎么报错了呢!!!
运维:包是你打包给我的呀!
你:😭你把服务器项目错误日志发我看下吧!

报错信息

验证码接口返回错误响应如下:

{
    "msg": null,
    "code": 500
}

服务器项目错误日志如下:

[XNIO-1 task-1] ERROR c.h.f.w.e.GlobalExceptionHandler - [handleRuntimeException,93] - 请求地址'/captchaImage',发生未知异常.
java.lang.NullPointerException: null
	at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)
	at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219)
	at sun.awt.FontConfiguration.init(FontConfiguration.java:107)
	at sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:774)
	at sun.font.SunFontManager$2.run(SunFontManager.java:441)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.font.SunFontManager.<init>(SunFontManager.java:386)
	at sun.awt.FcFontManager.<init>(FcFontManager.java:35)
	at sun.awt.X11FontManager.<init>(X11FontManager.java:57)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at java.lang.Class.newInstance(Class.java:442)
	at sun.font.FontManagerFactory$1.run(FontManagerFactory.java:83)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74)
	at java.awt.Font.getFont2D(Font.java:491)
	at java.awt.Font.access$000(Font.java:224)
	at java.awt.Font$FontAccessImpl.getFont2D(Font.java:228)
	at sun.font.FontUtilities.getFont2D(FontUtilities.java:200)
	at sun.font.StandardGlyphVector.initFontData(StandardGlyphVector.java:1126)
	at sun.font.StandardGlyphVector.init(StandardGlyphVector.java:1115)
	at sun.font.StandardGlyphVector.<init>(StandardGlyphVector.java:167)
	at java.awt.Font.createGlyphVector(Font.java:2549)
	at com.google.code.kaptcha.text.impl.DefaultWordRenderer.renderWord(DefaultWordRenderer.java:67)
	at com.google.code.kaptcha.impl.DefaultKaptcha.createImage(DefaultKaptcha.java:43)

分析和解决方案

根据报错信息,可以看出发生了NullPointerException异常,具体原因可能是在创建验证码图片时出现了空指针异常。报错信息中涉及到了字体管理相关的代码,所以极可能是在获取字体信息时出现了问题。
我们看到报错信息,可以看出问题出现在获取字体版本信息时:

	at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)

所以我们可以很明显的确定,服务器环境缺少相关字体文件或字体配置文件,导致无法获取字体版本信息;解决方法也很简单,缺少字体我们把字体安装上不就完事了,立马开干!

解决方案

这里我们操作的服务器是Centos7.9

我们先安装下字体库

# 更新软件包列表
sudo yum update
# 安装fontconfig字体库
sudo yum install fontconfig
# 安装ttf-dejavu字体
sudo yum install dejavu-sans-fonts

安装完成,我们查看下已经安装的字体库列表

fc-list

通过上面的命令我们可以看到刚安装上的DejaVu相关字体

安装完字体后,我们需要重启下项目服务,然后访问服务的验证码接口/captchaImage
响应结果:

{
    "msg": "操作成功",
    "img": "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",
    "code": 200,
    "captchaEnabled": true,
    "uuid": "39ca65c4404a4bd8ab10f6671d4506a1"
}

到这里,完美解决!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2242078.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于java Springboot高校失物招领平台

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

[C++] 智能指针

文章目录 智能指针的使用原因及场景分析为什么需要智能指针&#xff1f;异常抛出导致的资源泄漏问题分析 智能指针与RAIIC常用智能指针 使用智能指针优化代码优化后的代码优化点分析 析构函数中的异常问题解决方法 RAII 和智能指针的设计思路详解什么是 RAII&#xff1f;RAII 的…

Git回到某个分支的某次提交

1.切换到需要操作的分支&#xff08;<branch-name>是分支名称&#xff09;。 命令如下&#xff1a; git checkout <branch-name> 2.获取代码的提交记录 。命令如下&#xff1a; git log 按q退出当前命令对话。 获取到某次提交或者合并的hash值&#xff08;下文…

掌握 Spring Boot 的最佳方法 – 学习路线图

在企业界&#xff0c;人们说“Java 永垂不朽&#xff01;”。但为什么呢&#xff1f;Java 仍然是开发企业应用程序的主要平台之一。大型公司使用企业应用程序来赚钱。这些应用程序具有高可靠性要求和庞大的代码库。根据Java开发人员生产力报告&#xff0c;62% 的受访开发人员使…

1. Django中的URL调度器 (项目创建与简单测试)

1. 创建 Django 项目 运行以下命令创建一个名为 blog_project 的 Django 项目&#xff1a; django-admin startproject blog_project2. 创建博客应用 Django 中&#xff0c;项目可以包含多个应用。创建一个名为 blog 的应用&#xff1a; cd blog_project python manage.py …

frp内网穿透介绍安装教程

文章目录 前言一、安装二、测试使用总结 前言 内网穿透&#xff08;Port Forwarding&#xff09;是将公网上的IP地址映射到内部网络中的一台计算机的某个端口上&#xff0c;以便外部网络可以访问该计算机中运行的应用程序。内网穿透技术可以通过一些开源工具来实现&#xff0c…

主界面获取个人信息客户端方

主界面获取个人信息客户端方 前言 上一集我们完成了websocket身份验证的内容&#xff0c;那么这一集开始我们将要配合MockServer来完成主界面获取个人信息的内容。 需求分析 我们这边是完成客户端那方的内容&#xff0c;当客户端登录成功之后&#xff0c;我们就要从服务器获…

redis实现消息队列的几种方式

一、了解 众所周知&#xff0c;redis是我们日常开发过程中使用最多的非关系型数据库&#xff0c;也是消息中间件。实际上除了常用的rabbitmq、rocketmq、kafka消息队列&#xff08;大家自己下去研究吧~模式都是通用的&#xff09;&#xff0c;我们也能使用redis实现消息队列。…

单片机智能家居火灾环境安全检测

目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 电路图采用Altium Designer进行设计&#xff1a; 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 在现代社会&#xff0c;火灾安全始终是人们关注的重点问题。随着科技的不…

【目标检测】用YOLOv8-Segment训练语义分割数据集(保姆级教学)

前言 这篇教程会手把手带你用 YOLOv8-Segment 搭建一个属于自己的分割任务项目。从环境配置到数据集准备&#xff0c;再到模型训练和测试&#xff0c;所有步骤都有详细说明&#xff0c;适合初学者使用。你将学会如何安装必要的软件&#xff0c;标注自己的数据&#xff0c;并使…

mac2019环境 Airflow+hive+spark+hadoop本地环境安装

1 环境介绍 本地安装可分为两个部分&#xff0c;mac软件环境&#xff0c; python开发环境 ps: 安装过程参考chatgpt、csdn文章 1.1 mac软件环境 目标安装的的软件是hive、apache-spark、hadoop&#xff0c;但是这三个软件又依赖java(spark依赖&#xff09;、ssh&#xff08…

1.7 JS性能优化

从输入url到页面加载完成都做了些什么 输入 URL - 资源定位符 http://www.zhaowa.com - http 协议 域名解析 https://www.zhaowa.com > ip 1. 切HOST&#xff1f; > 浏览器缓存映射、系统、路由、运营商、根服务器 2. 实际的静态文件存放&#xff1f; 大流量 > 多个…

【Ansible常用命令+模块+Playbook+Roles】

Ansible 一、命令1.1 常用命令 二、模块2.1 shell模块2.2 复制模块2.3 用户模块2.4 软件包管理2.5 服务模块2.6 文件模块2.7 收集模块2.8 fetch2.9 cron2.10 group2.11 script2.12 unarchive 三、YAML Roles3.1 目录结构3.2 文件内容tasks/main.yamlnginx.conf.j2vars/main.yam…

Oracle19C AWR报告分析之Wait Classes by Total Wait Time

Oracle19C AWR报告分析之Wait Classes by Total Wait Time 一、分析数据二、详细分析2.1 指标参数介绍2.2 数据库性能分析2.3 综合性能评估 在 Oracle 数据库的 AWR 报告中&#xff0c;Wait Classes by Total Wait Time 是评估数据库性能的重要部分。本篇文章主要是介绍指标参数…

嵌入式硬件电子电路设计(五)MOS管详解(NMOS、PMOS、三极管跟mos管的区别)

引言&#xff1a;在我们的日常使用中&#xff0c;MOS就是个纯粹的电子开关&#xff0c;虽然MOS管也有放大作用&#xff0c;但是几乎用不到&#xff0c;只用它的开关作用&#xff0c;一般的电机驱动&#xff0c;开关电源&#xff0c;逆变器等大功率设备&#xff0c;全部使用MOS管…

问题大集-01-kafka问题

1、问题&#xff1a;Windows下启动单机kafka出现&#xff1a;系统找不到指定路径 解决&#xff1a; 是kafka不能识别本机的java环境&#xff08;JVM&#xff09;&#xff0c;故需要指定java路径&#xff0c; 进入kafka路径下的\bin\windows&#xff0c;找到&#xff1a;kafk…

C++ 的发展

目录 C 的发展总结&#xff1a;​编辑 1. C 的早期发展&#xff08;1979-1985&#xff09; 2. C 标准化过程&#xff08;1985-1998&#xff09; 3. C 标准演化&#xff08;2003-2011&#xff09; 4. C11&#xff08;2011年&#xff09; 5. C14&#xff08;2014年&#xf…

Ubuntu问题 -- 允许ssh使用root用户登陆

目的 新重装的系统, 普通用户可以使用ssh登陆服务器, 但是root不能使用ssh登陆 方法 vim 编辑ssh配置文件 sudo vim /etc/ssh/sshd_config找到 PermitRootLogin 这一行, 把后面值改成 yes 重启ssh sudo service sshd restart然后使用root账号登陆即可

HarmonyOS4+NEXT星河版入门与项目实战--------开发工具与环境准备

文章目录 1、熟悉鸿蒙官网1、打开官网2、下载 DevEco Studio3、HarmonyOS 资源库4、开发指南与API 2、安装 DevEco Studio1、软件安装2、配置开发工具 1、熟悉鸿蒙官网 1、打开官网 百度搜索 鸿蒙开发者官网 点击进入开发者官网&#xff0c;点击开发&#xff0c;可以看到各种…

使用 start-local 脚本在本地运行 Elasticsearch

警告&#xff1a;请勿将这些说明用于生产部署 本页上的说明仅适用于本地开发。请勿将此配置用于生产部署&#xff0c;因为它不安全。请参阅部署选项以获取生产部署选项列表。 使用 start-local 脚本在 Docker 中快速设置 Elasticsearch 和 Kibana 以进行本地开发或测试。 此设…