登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
1
2
/ 2 页
下一页
返回列表
首页
›
业界区
›
安全
›
【分享排雷经历】系统引入Apache-Tika产生的NoClassDefF ...
【分享排雷经历】系统引入Apache-Tika产生的NoClassDefFoundError错误
[ 复制链接 ]
凶契帽
2025-9-26 11:51:00
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
今天,我们的重点工作是对monorepo系统的文件导入做安全控制,主要是通过判断文件的扩展名和类型,来限定用户导入文件的合法性,防止非法文件进入系统造成风险。
我们借用了此前在另一个系统zfquan基于Apache Tika的解决方案。
不巧,在运行main程序时,出现了一个 NoClassDefFoundError 错误-
未找到Apache Commons IO(commons-io)类库的一个class的定义
。
20:25:14.667 [main] DEBUG org.apache.tika.config.TikaConfig - loading tika config from defaults; no config file specified
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/input/UnsynchronizedByteArrayInputStream
at org.apache.tika.config.TikaConfig.getDefaultMimeTypes(TikaConfig.java:317)
at org.apache.tika.config.TikaConfig.<init>(TikaConfig.java:246)
at org.apache.tika.config.TikaConfig.getDefaultConfig(TikaConfig.java:390)
at org.apache.tika.Tika.<init>(Tika.java:119)
at com.emax.zhenghe.common.util.TikaFileSecurityUtils.<init>(TikaFileSecurityUtils.java:20)
at com.emaxcard.car.TestMain.main(TestMain.java:38)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.io.input.UnsynchronizedByteArrayInputStream
at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 6 more
Process finished with exit code 1
复制代码
NoClassDefFoundError(而不是 ClassNotFoundException) 表示编译时类存在,但运行时找不到。
常见原因:
依赖未正确引入。
依赖冲突导致类加载失败。
打包时遗漏了 commons-io.jar(如 maven-shade-plugin 未正确包含依赖)。
同样的Tika,为什么搬到monorepo就不行了呢?
经查maven依赖,monorepo系统与zfquan系统所依赖的 commons-io 的版本不同,zfquan是
2.16.1
,monorepo是
2.6
,这导致了问题的发生。
与单体结构的zfquan所不同的是,monorepo是一个庞大的同时拥有基础lib库和上层应用的工程。我们是在lib库的 sby-component-dfs 包 中添加的Tika依赖。
我尝试在其中一个应用层pom里显式添加 commons-io:2.16.1,是可以解决问题的。
但,monorepo有多达数十个应用,我显然不能在这么多应用层里显式添加 commons-io:2.16.1 依赖。而且,这不符合我们的系统开发规范————maven包依赖统一在顶层pom来管理。
那么,如何继续解决呢?
通过应用的maven依赖树(dependency:tree)得知,commons-io:commons-io:jar:2.6 是直接作为顶层依赖引入的(没有被其他库传递依赖)
然后我在IDE中全局查找 commons-io,发现在顶层maven依赖管理文件 spring-base.pom 中,的确显式定义了 commons-io 的版本号!
<properties>
...
<commons.version>2.6</commons.version>
</properties>
<dependencyManagement>
<dependencies>
...
<dependency>
<groupId>commons-io</groupId>
commons-io</artifactId>
<version>${commons.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
复制代码
如此,我把这个版本号变更为 2.16.1 ,也是可以解决问题的。
但,monorepo项目庞大,这样可能会拆东墙补西墙————可能影响其他用到commons-io的系统功能。
so,我们得针对 Tika 版本来做文章,找到适配 commons-io:2.6 的版本。
DeepSeek很快给出答案:Tika 2.4.1依赖commons-io:2.6。开发者将 Tika 版本从 2.9.1 降级到 2.4.1,不再出现NoClassDefFoundError错误,并且经测试,这个版本的Tika可以满足我们对系统文件导入的安全控制。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
分享
排雷
经历
系统
引入
相关帖子
AI Agent 生产级记忆系统目录结构
聚合系统设计:策略模式(Strategy Pattern)在银行通道对接场景中的应用
安心存取,轻松分享!一款基于 CloudFlare 的开源文件托管工具!
FastAPI分布式系统实战:拆解分布式系统中常见问题及解决方案
Windows系统安装OpenClaw并使用Qwen千问接入飞书教程
竞赛和实习经历,秋招里哪个更有含金量?
解决 api-ms-win-core-path-l1-1-0.dll 缺失错误:Windows 7 系统完整修复指南
OpenClaw 插件系统:如何打造全能私人助理 --OpenClaw源码系列第2期
第 4 篇|状态机:调度系统真正的灵魂
分享一些2026年有意思的现代化Django生态组件
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
AI Agent 生产级记忆系统目录结构
0
377
郗燕岚
2026-02-28
安全
聚合系统设计:策略模式(Strategy Pattern)在银行通道对接场景中的应用
2
285
呈步
2026-03-01
安全
安心存取,轻松分享!一款基于 CloudFlare 的开源文件托管工具!
1
280
滑清怡
2026-03-03
业界
FastAPI分布式系统实战:拆解分布式系统中常见问题及解决方案
2
346
擘塞
2026-03-03
业界
Windows系统安装OpenClaw并使用Qwen千问接入飞书教程
0
72
吉娅寿
2026-03-04
业界
竞赛和实习经历,秋招里哪个更有含金量?
0
755
卒挪
2026-03-04
安全
解决 api-ms-win-core-path-l1-1-0.dll 缺失错误:Windows 7 系统完整修复指南
1
620
拍棹
2026-03-04
业界
OpenClaw 插件系统:如何打造全能私人助理 --OpenClaw源码系列第2期
0
941
吟氅
2026-03-04
安全
第 4 篇|状态机:调度系统真正的灵魂
0
95
诀锺
2026-03-05
业界
分享一些2026年有意思的现代化Django生态组件
0
872
煅汾付
2026-03-05
回复
(26)
锑砖
2025-11-28 00:55:40
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
感谢分享
堠秉
2025-12-24 20:15:46
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
东西不错很实用谢谢分享
溧久苟
2026-1-1 23:51:11
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
感谢发布原创作品,程序园因你更精彩
焦尔蕾
2026-1-17 20:28:58
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
鼓励转贴优秀软件安全工具和文档!
圄旧剖
2026-1-18 15:32:06
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢分享,试用一下
吕梓美
2026-1-20 17:11:43
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
懂技术并乐意极积无私分享的人越来越少。珍惜
劳暄美
2026-1-21 19:19:51
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
感谢分享,下载保存了,貌似很强大
坡琨
2026-1-22 05:14:00
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
前排留名,哈哈哈
鞍注塔
2026-1-23 07:02:00
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
谢谢分享,辛苦了
归筠溪
2026-1-26 10:39:07
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢分享,试用一下
蒙飘
2026-1-26 10:53:17
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
很好很强大 我过来先占个楼 待编辑
嗣伐
2026-1-28 06:47:26
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
感谢发布原创作品,程序园因你更精彩
余思洁
2026-1-29 06:07:54
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
yyds。多谢分享
恙髡
2026-2-4 08:36:07
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
喜欢鼓捣这些软件,现在用得少,谢谢分享!
凌彦慧
2026-2-5 10:02:52
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享
金娅鸣
2026-2-7 06:49:41
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享,下载保存了,貌似很强大
谧怏弦
2026-2-9 01:56:28
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
谢谢楼主提供!
酒跚骼
2026-2-9 07:15:04
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
东西不错很实用谢谢分享
周冰心
2026-2-9 15:21:58
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这个好,看起来很实用
下一页 »
1
2
/ 2 页
下一页
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
凶契帽
2026-2-9 15:21:58
关注
0
粉丝关注
10
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991125
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
宋子
9888
6
韶又彤
9910
7
闰咄阅
9993
8
刎唇
9995
9
蓬森莉
9871
10
遗憩
10006
查看更多
今日好文热榜
682
MyBatis-配置文件解读及MyBatis为何不用编
151
gcsfuse中的锁与偏序理论
854
java String为什么不可变
964
Java 创建对象的 6 种方式 + 底层原理(面
130
# 纽约出行机票全攻略:特价预订+机场指南
953
Coolify: Vercel 的开源版私有化部署平替版
929
探索JavaScript的秘密令牌:独一无二的`Sym
189
MySQL InnoDB Cluster节点重新加入集群踩坑
304
Kubernetes Dashboard部署
646
长春市万佳医院|医疗场景数字化管理提效
391
PicoServer 跨平台 Web 实战系列(二) 路由
856
.NET SqlSugar多线程下SqlSugarClient 的线
933
通义深度搜索-API概览
679
杨辉三角原理及PHP代码实现
385
Java SE 和 Java EE 的核心功能模块
684
3分钟搞懂深度学习AI:梯度下降:迷雾中的
144
为什么 PHP 闭包要加 static?
426
FastAPI流式输出实战与避坑指南:让AI像人
193
用AI写代码,我差点把漏洞发上线:血泪总结
872
分享一些2026年有意思的现代化Django生态组