You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

POI读取设置Secret级MSIP标签的Word自定义属性报错问题问询

问题根因

当你给Word文档设置的Microsoft Azure Information Protection(AIP)敏感度标签为Confidential、Secret等高保护级别时,AIP会自动对文档进行加密封装,原本标准OOXML格式(.docx本质是zip压缩包)的文档会被转为OLE2格式的加密封装包,你当前代码中使用的XWPFDocument仅支持读取未加密的OOXML格式Word文档,无法识别加密后的OLE2结构,因此抛出OLE2NotOfficeXmlFileException错误。低级别标签Internal、Private不会触发自动加密逻辑,因此代码可以正常运行。

解决方案

  • 第一步:先对输入流的文件格式做前置判断,避免直接调用XWPF逻辑报错:
// 先标记流,判断完可以重置回到开头
fis.mark(1024);
FileMagic magic = FileMagic.valueOf(fis);
fis.reset();

if (magic == FileMagic.OLE2) {
    // 文档已被AIP加密,走加密文档处理逻辑
} else if (magic == FileMagic.OOXML) {
    // 未加密,走你原来的XWPF读取逻辑
}
  • 第二步:根据你的业务需求选择处理方式:
    • 若需要读取完整文档内容:需先通过微软AIP官方SDK对加密文档完成权限校验和解密,将解密后的流输入给XWPFDocument即可沿用原有逻辑。
    • 若仅需要读取敏感度标签、自定义属性,不需要读取文档正文:可直接使用POI的OLE2属性读取接口提取属性,无需解密全文档:
// 读取加密OLE2文档的自定义属性示例
POIFSFileSystem fs = new POIFSFileSystem(fis);
DocumentSummaryInformation dsi = fs.getDocumentSummaryInformation();
CustomProperties customProps = dsi.getCustomProperties();
// 直接获取你需要的MSIP标签、Sensitivity属性即可
String sensitivity = customProps.get("Sensitivity").toString();
  • 辅助优化:将Apache POI版本升级至5.2.0及以上,该版本优化了带AIP标签文档的格式适配能力,部分轻量加密的文档可直接兼容原有读取逻辑。

内容的提问来源于stack exchange,提问作者Dharpa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 22:18:01