问题
先把问题放这
POI 依赖升级后很多类找不到了,比如设置页边距的CTPageMar,
Maven下载source下不下来,
4.1.1、4.1.2里一些类使用了CTPageMar等类,但是它包里又没这个类
代码漏洞告警
昨天项目代码被检测到POI高危漏洞
漏洞级别:高危漏洞名称:Apache POI 代码问题漏洞 漏洞介绍 Apache
POI是美国阿帕奇(Apache)软件基金会的一个开源函数库,它提供API给Java程序可对Microsoft
Office格式档案进行读和写。 Apache POI
4.1.0及之前版本中存在安全漏洞。攻击者可借助特制的文档利用该漏洞读取本地文件系统中或网络资源中的文件。漏洞公告 升级至4.1.11或后续版本 推荐使用最新版5.0.0
现在引用的依赖是
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>ooxml-schmas</artifactId>
<version>1.4</version>
</dependency>
寻找高版本
让我升高级版本是吧,好,我去https://mvnrepository.com/上搜一搜ooxml-schmas
第二个已经是最新的1.4了,18年的,那没必要要了
第一个第三个的版本,看起来漏洞告警是推荐的版本,4.1.1和5.0.0
解决方案一:根据告警提示替换依赖
但是引入出现问题了,
依赖升级后很多类找不到了,比如设置页边距的CTPageMar,
Maven下载source下不下来,
4.1.1、4.1.2里一些类使用了CTPageMar等类,但是它包里又没这个类
引入依赖:
编译发现缺少类,我想可能是不兼容吧,但是为什么adNewPgMar返回值是这个类呢
返回值是这个类
jar中却没这个东西
点击类进不去,下载source下不下来
搜索引用,看到一些类似的类,CTPageMargins,但是不是我要的,我写的是word文档,用的包路径是wordprocessingml下的,其他poi-ooxml-schemas包下的都是spreadsheet、drawingml,不对
解决方案二:把缺少的类从旧包拷到本地
这个就属于有点自欺欺人了,行是行,但是我发现CTPageMar 拷到本地后,还有其他类缺少,是让我把整个旧包拷过来吗,不靠谱,放弃
解决方案三:终于找到靠谱的依赖
2021年的新包,一个full 一个lite,引入后发现lite还是缺少我要的类,但是full有!
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-full</artifactId>
<version>5.0.0</version>
</dependency>
终于找到你
总结
网上设置页边距的方法不多,大都是漏洞暴露出来之前的,做开发的人也不都会完全把相关文档协议吃透,也让后续修改的人不敢乱动代码结构。
我怀疑过高版本去除了低版本的类,但是又发现高版本还在用他们,但是却定位不到,最后还好有个2021年的包能用,就是方案三,如果没这个,我就用方案二凑合了,如果方案二不行,兼容搞不了,我再考虑重构代码,研究一下高版本怎么设置页边距。
最后
poi-ooxml-full 5.0.0 有CTPageMar
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/93711.html