2

在我们的应用程序中,我们正在尝试升级到 Spring boot 2,我们正在使用 spring-security-saml2-core:1.0.4.RELEASE,在运行应用程序时我们遇到了以下异常。看来,classpaath 上有两个 jars xmltooling-1.4.6opensaml-core-3.3.0,它们有相同的文件default-config.xml。在这种情况下,类加载器碰巧将opensaml-core-3.3.0放在xmltooling-1.4.6.jar 之前,并且default-config.xml加载错误

<ObjectProviders>
        <ObjectProvider qualifiedName="xt:DEFAULT">
        <BuilderClass className="org.opensaml.core.xml.schema.impl.XSAnyBuilder"/>
        <MarshallingClass className="org.opensaml.core.xml.schema.impl.XSAnyMarshaller"/>
        <UnmarshallingClass className="org.opensaml.core.xml.schema.impl.XSAnyUnmarshaller"/>
    </ObjectProvider>  </ObjectProviders> 

java.lang.ClassCastException: org.opensaml.core.xml.schema.impl.XSAnyBuilder cannot be cast to org.opensaml.xml.XMLObjectBuilder
        at org.opensaml.xml.XMLConfigurator.initializeObjectProviders(XMLConfigurator.java:236)
        at org.opensaml.xml.XMLConfigurator.load(XMLConfigurator.java:182)
        at org.opensaml.xml.XMLConfigurator.load(XMLConfigurator.java:166)
        at org.opensaml.xml.XMLConfigurator.load(XMLConfigurator.java:143)
        at org.opensaml.DefaultBootstrap.initializeXMLTooling(DefaultBootstrap.java:203)
        at org.opensaml.DefaultBootstrap.initializeXMLTooling(DefaultBootstrap.java:186)
        at org.opensaml.DefaultBootstrap.bootstrap(DefaultBootstrap.java:92)
        at org.opensaml.PaosBootstrap.bootstrap(PaosBootstrap.java:27)
        at org.springframework.security.saml.SAMLBootstrap.postProcessBeanFactory(SAMLBootstrap.java:42).

有人可以在这里帮忙。请..

4

1 回答 1

2

参考https://issues.shibboleth.net/jira/browse/OSJ-152

opensamlV2 版本使用xmltooling.jar.

opensamlV3 版本使用opensaml-soap-impl.jar的包名不同xmltooling.jar

例子:

  • opensaml-soap-impl.jar 使用 --> org.opensaml.core.xml.XMLObjectBuilder

  • xmltooling.jar使用 --> org.opensaml.xml.XMLObjectBuilder

根本原因:您的类路径同时具有 v2 和 v3 版本的opensaml. 这是classcast例外的原因。

解决方案:

理想情况下,您不需要同时拥有两个版本的opensaml. 由于 Maven 依赖管理,它可能会意外发生。删除其中之一。

  1. 如果您的代码库与opensamlv2版本兼容并且您不想升级,请排除opesamlv3jars,如下所示。
  2. 否则将您的代码库升级到与 v3 版本兼容并删除opensamlV2相关的 jar
于 2019-07-31T07:08:55.520 回答