这不是有效的xpath表达式,无法在表达式内部声明名称空间前缀。
samlp:AuthnRequest/UserID xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
XPathFilterParameterSpec确实有另一个构造函数,该构造函数允许指定名称空间前缀的映射,您可以尝试以下表达式:
new XPathFilterParameterSpec("samlp:AuthnRequest/UserID", Collections.singletonMap("samlp", "urn:oasis:names:tc:SAML:2.0:protocol"))编辑:
该消息似乎不是错误,请参见此处的第426行,但其日志级别可能应低于INFO。
我也看了一下xpath过滤的描述:
对于输入节点集中的每个节点,将对XPath参数中出现的XPath表达式进行一次评估。结果转换为布尔值。如果布尔值为true,则该节点包含在输出节点集中。如果布尔值为false,则从输出节点集中省略该节点。
因此,仅包含
UserID签名中的正确xpath表达式将是
self::UserID。但是不要问我,这对于xml签名是否真的有意义。规范中的示例似乎使用xpath表达式来包含除签名元素本身之外的所有内容:
not(ancestor-or-self::dsig:Signature)
编辑2:
正确的表达实际上是
ancestor-or-self::UserID因为过滤器还必须包括该节点的文本子
UserID节点。



