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

这里写目录标题

  • 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: nullat 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.xdnf.cn/news/17463.html

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

相关文章

Java期末复习暨学校第八次上机课作业

Java期末复习暨学校第八次上机课作业&#xff1a; 第一题&#xff1a; 分别给出了一个无参构造方法和有参构造方法&#xff0c;然后针对半径给出了set和get方法。针对面积给出了getArea方法&#xff0c;返回面积的值。 针对周长给出getPerimeter方法&#xff0c;返回周长。最后…

ShardingSphere如何轻松驾驭Seata柔性分布式事务?

0 前文 上一文解析了 ShardingSphere 强一致性事务支持 XAShardingTransactionManager &#xff0c;本文继续&#xff1a; 讲解该类介绍支持柔性事务的 SeataATShardingTransactionManager sharding-transaction-xa-core中关于 XAShardingTransactionManager&#xff0c;本文…

将 SQL 数据库连接到云:PostgreSQL、MySQL、SQLite 和云集成说明

在当今数据驱动型世界中&#xff0c;云技术已经完全改变了数据库的管理和扩展。SQL 数据库&#xff08;包括 PostgreSQL、MySQL 和 SQLite&#xff09;在相当长的一段时间内一直是开发人员的最爱。然而&#xff0c;为了响应对可扩展、适应性强且经济高效的解决方案日益增长的需…

Vulnhub靶场案例渗透[10]- Momentum2

文章目录 一、靶场搭建1. 靶场描述2. 下载靶机环境3. 靶场搭建 二、渗透靶场1. 确定靶机IP2. 探测靶场开放端口及对应服务3. 扫描网络目录结构4. 代码审计5. 反弹shell6. 提权 一、靶场搭建 1. 靶场描述 - Difficulty : medium - Keywords : curl, bash, code reviewThis wor…

STM32设计防丢防摔智能行李箱

目录 目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 1.电路图采用Altium Designer进行设计&#xff1a; 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 随着科技的不断发展&#xff0c;嵌入式系统、物联网技术、智能设备…

前后端请求响应

引入 在之前的例子中&#xff0c;我们编写了一个简单的web类&#xff0c;我们运行启动类&#xff0c;启动内嵌的tomcat后就可以在浏览器通过特定的路径访问tomcat中的应用程序。 但之前编写的程序仅仅是个简单的java类&#xff0c;其并未实现某个接口或继承某个类&…

爬虫——数据解析与提取

第二节&#xff1a;数据解析与提取 在网络爬虫开发中&#xff0c;获取网页内容&#xff08;HTML&#xff09;是第一步&#xff0c;但从这些内容中提取有用的数据&#xff0c;才是爬虫的核心部分。HTML文档通常结构复杂且充满冗余信息&#xff0c;因此我们需要使用高效的解析工…

数据结构C语言描述3(图文结合)--双链表、循环链表、约瑟夫环问题

前言 这个专栏将会用纯C实现常用的数据结构和简单的算法&#xff1b;有C基础即可跟着学习&#xff0c;代码均可运行&#xff1b;准备考研的也可跟着写&#xff0c;个人感觉&#xff0c;如果时间充裕&#xff0c;手写一遍比看书、刷题管用很多&#xff0c;这也是本人采用纯C语言…

设计模式-策略模式

1. 策略模式 策略模式&#xff08;Strategy Pattern&#xff09;针对一组算法&#xff0c;将每一个算法封装到 具有共同接口 的独立的类中&#xff0c;从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。 在软件开发中&#xff0c;经常会遇到…

FFmpeg 4.3 音视频-多路H265监控录放C++开发十四,总结编码过程,从摄像头获得数据后,转成AVFrame,然后再次转成AVPacket,

也就是将摄像头采集到的YUV 的数据换成 AVFrame&#xff0c;然后再次转成 AVPacket&#xff0c;那么这AVPakcet数据要怎么办呢&#xff1f;分为三种情况&#xff1a; 一种是将AVPacket存储成h264文件&#xff0c;由于h264编码器在将avframe变成avpacket的时候就是按照h264的格…

【srm,招标询价】采购电子化全流程,供应商准入审核,在线询价流程管理(JAVA+Vue+mysql)

前言&#xff1a; 随着互联网和数字技术的不断发展&#xff0c;企业采购管理逐渐走向数字化和智能化。数字化采购平台作为企业采购管理的新模式&#xff0c;能够提高采购效率、降低采购成本、优化供应商合作效率&#xff0c;已成为企业实现效益提升的关键手段。系统获取在文末…

Transformer学习笔记(一)

Transformer学习笔记 基于 3B1B 可视化视频 自注意力机制 1.每个词的初始嵌入是一个高维向量&#xff0c;只编码该单词含义&#xff0c;与上下文没有关联 2.对初始向量进行位置编码&#xff0c;在高维向量中编码进位置信息&#xff08;单词在语言序列中的位置信息&#xff…

4.4.5 timer中断流向Linux(从interrupt log回放)

4.4.5 timer中断流向Linux&#xff08;从interrupt log回放&#xff09; 按上文所述&#xff0c;timer中断3已经记录到root domain的interrupt log。在《3.4.1.3 IPIPE interrupt log数据结构》中&#xff0c;已经讨论过interrupt log的记录与回放。本小结&#xff0c;讨论什么…

WinDefender Weaker

PPL Windows Vista / Server 2008引入 了受保护进程的概念&#xff0c;其目的不是保护您的数据或凭据。其最初目标是保护媒体内容并符合DRM &#xff08;数字版权管理&#xff09;要求。Microsoft开发了此机制&#xff0c;以便您的媒体播放器可以读取例如蓝光&#xff0c;同时…

基于redis完成延迟队列

添加依赖 使用redisson完成延迟队列效果 <!-- redisson依赖 --><dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.17.4</version> <!-- 请使用最新版本 --></dependency&g…

星辰资讯 | TiDB v7.5.4 v8.4.0 发版

作者&#xff1a; ShawnYan 原文来源&#xff1a; https://tidb.net/blog/6e299751 TiDB 8.4.0 DMR 发版 11 月 11 日&#xff0c;TiDB 8.4.0 版本发布&#xff0c;以下是该版本的一些关键特性和改进&#xff1a; 性能 分区表全局索引成为正式功能 &#xff1a;提高检索…

Spring基础

Spring基础 目录&#xff1a; 一、Spring框架简介 二、Spring容器机制 一、Spring框架简介 1. Spring发展历程 •在Spring兴起之前&#xff0c;Java企业级开发主要通过EJB (Enterprise JavaBean)完成。EJB是服务器端的组件模型&#xff0c;由于它过于依靠EJB容器&#xf…

二分查找法(leetcode 704)

在一个数组里找一个target&#xff0c;判断这个target在不在这个数组里&#xff0c;如果在&#xff0c;返回这个数组所对应的这个元素所对应的下标&#xff0c;否则返回-1. 易错点&#xff1a; &#xff08;1&#xff09;while(left<right) vs while(left<…

python的matplotlib实现数据分析绘图

目录 需求 效果 数据分析绘图示例 代码解释 运行结果 需求 分析一个班级中学生成绩分布&#xff0c;并绘图 效果 数据分析绘图示例 import matplotlib.pyplot as plt import numpy as np# 假设的学生成绩数据 np.random.seed(0) # 设置随机种子以确保结果可复现 score…

STM32电源管理—实现低功耗

注&#xff1a; 本文是学习野火的指南针开发板过程的学习笔记&#xff0c;可能有误&#xff0c;详细请看B站野火官方配套视频教程&#xff08;这个教程真的讲的很详细&#xff0c;请给官方三连吧&#xff09; 在响应绿色发展的同时&#xff0c;在很多应用场合中都对电子设备的功…