如何使用Apache POI或其他API读取MS Word/Excel的安全分类标识?
Office文档安全分类标签读取方案
首先明确:企业常用的Office安全分类标签主要有三类存储形态,Apache POI本身可以覆盖绝大多数场景的读取需求,不需要额外引入其他API:
方案1:读取自定义文档属性(适配自研分类标签场景)
绝大多数企业自研的分类标签都会存储在文档的自定义属性字段中,POI原生支持读取该字段:
- 针对.xlsx格式Excel
代码示例:try (XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream("target.xlsx"))) { CustomProperties customProps = wb.getProperties().getCustomProperties(); // 常见属性key包括「安全分类」「敏感度等级」「SecurityLevel」等,可根据企业实际配置调整 if (customProps.contains("安全分类")) { String classifyLevel = customProps.getProperty("安全分类").getValue().toString(); // 输出对应等级:内部/机密/公开 } } - 针对.docx格式Word
代码示例:try (XWPFDocument doc = new XWPFDocument(new FileInputStream("target.docx"))) { CustomProperties customProps = doc.getProperties().getCustomProperties(); if (customProps.contains("安全分类")) { String classifyLevel = customProps.getProperty("安全分类").getValue().toString(); } }
如果是旧版.xls/.doc格式,替换为HSSFWorkbook/HWPFDocument对应的属性读取方法即可,逻辑完全一致
方案2:读取微软MIP敏感度标签
如果企业使用的是微软官方的信息保护(MIP)敏感度标签,这类标签会存储在/docProps/custom.xml中,属性前缀为MSIP_Label_:
- 直接用方案1的方法读取自定义属性,匹配前缀为
MSIP_Label_的属性值,即可获取标签ID和名称,映射到企业对应的分类等级即可 - 如果需要做更复杂的标签校验,也可以直接使用微软MIP SDK本地解析,不需要调用在线服务
方案3:遍历自定义XML扩展段
如果上述两种方法都读取不到,说明企业将标签存储在了自定义XML扩展部分:
- Excel可通过
XSSFWorkbook.getRelations()遍历所有文档关系项,筛选XML类型的内容后解析查找分类标签字段 - Word可通过
XWPFDocument.getCustomXmlParts()直接获取所有自定义XML段,遍历内容匹配分类关键词即可
内容的提问来源于stack exchange,提问作者Dharpa
相关产品推荐
相关产品推荐

