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

升级至Shibboleth IDP 5.x时自定义Mongo DataConnector配置报错排查

解决Shibboleth IDP 5.x自定义Mongo DataConnector的Schema解析拦截问题

问题根因

Shibboleth 5.x升级后引入的LocalOnlyResourceEntityResolver会拦截带有classpath:/前缀的schema路径。Spring的Schema解析逻辑先判断文件后缀(XSD/DTD),再调用这个Resolver,而它只允许本地文件路径(file:协议)或无协议的相对路径,不接受classpath:/前缀的systemId,导致自定义XSD被误判为远程资源拦截。

解决方案

1. 修正spring.schemas映射逻辑(核心步骤)

现有spring.schemas配置是正确的,但要确保XML配置文件中使用命名空间URI而非直接引用XSD的classpath路径。比如在属性解析器配置XML里,应该声明命名空间:

<resolver:DataConnector xsi:type="uid:MongoDBConnector" ...>

其中uid对应的命名空间是http://dev.unitedid.org/NS/mongodb-connector,Spring会自动通过spring.schemas映射找到本地的schema/mongodb-connector.xsd,无需在XML里直接指定xsi:schemaLocation为classpath:/schema/mongodb-connector.xsd。

如果XML配置里显式写了指向classpath:/schema/mongodb-connector.xsd的xsi:schemaLocation,请删除该配置,改用命名空间映射。

2. 检查自定义组件的配置解析代码

确保UIDDataConnectorNamespaceHandler和对应的BeanDefinitionParser在处理配置时,没有硬编码classpath:/schema/mongodb-connector.xsd作为systemId。正确做法是让Spring通过命名空间URI自动关联到本地XSD,而非直接指定classpath路径。

3. 验证XSD文件的类路径位置

确认schema/mongodb-connector.xsd文件被正确打包到自定义组件的JAR中,路径与spring.schemas里的映射一致(即JAR根目录下的schema/mongodb-connector.xsd)。

备选方案:适配Shibboleth 5.x的EntityResolver逻辑

如果上述方法无效,可以尝试扩展或替换LocalOnlyResourceEntityResolver,允许classpath:协议的schema解析。但这种方法需要修改Shibboleth核心配置,不推荐作为首选方案。

是否需要弃用现有代码?

不需要立即弃用。上述配置调整应该能解决问题。如果后续维护成本过高,再考虑替换为官方提供的MongoDB DataConnector(若满足业务需求)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:00:07