范围和顺序
原文: https://docs.oracle.com/javase/tutorial/jaxp/properties/scope.html
javax.xml.XMLConstants#FEATURE_SECURE_PROCESSING
(FSP)是 XML 处理器的必需功能,包括 DOM,SAX,模式验证,XSLT 和 XPath。当设置为true
时,建议实现启用上面指定的新属性定义的访问限制。为了兼容性,JAXP 1.5 不启用新的限制,尽管默认情况下 FSP 对于 DOM,SAX 和模式验证是正确的。
对于 JDK 8,当显式设置 FSP 时,建议将新的accessExternal *
属性设置为空字符串。这只是通过 API 设置 FSP 的情况,例如factory.setFeature(FSP,true)
。虽然默认情况下 FSP 对于 DOM,SAX 和模式验证是正确的,但它不被视为“显式”设置,因此默认情况下 JDK 8 不设置限制。
jaxp.properties
文件中指定的属性会影响 JDK 或 JRE 的所有调用,并将覆盖其默认值,或者可能由 FEATURE_SECURE_PROCESSING 设置的值。
设置时,系统属性将仅影响一个调用,并将覆盖默认设置或 jaxp.properties 中设置的设置,或者可能由 FEATURE_SECURE_PROCESSING 设置的设置。
通过 JAXP 工厂或SAXParser
指定的 JAXP 属性优先于系统属性, jaxp.properties
文件,以及javax.xml.XMLConstants#FEATURE_SECURE_PROCESSING
。
新的 JAXP 属性对它们在以下情况下尝试限制的相关构造没有影响:
- 当有一个解析器并且解析器返回的源不为 null。这适用于可在 SAX 和 DOM 解析器上设置的实体解析器,StAX 解析器上的 XML 解析器,SchemaFactory 上的 LSResourceResolver,Validator 或 ValidatorHandler 或变换器上的 URIResolver。
- 通过调用
SchemaFactory
的newSchema
方法显式创建模式时。 不需要外部资源时。例如,参考实现支持以下特征/属性,并且可以用于指示处理器不加载外部 DTD 或解析外部实体。
http://apache.org/xml/features/disallow-doctype-decl true
http://apache.org/xml/features/nonvalidating/load-external-dtd false
http://xml.org/sax/features/external-general-entities false
http://xml.org/sax/features/external-parameter-entities false