我正在尝试对XML文件进行签名操作。在此过程中,我使用xmlSec 1.5库。如果我在本地测试中运行代码,则该过程将成功完成。但是,如果我在Jboss 7.1的战争中部署代码,则Jboss会将其对xmlSec 1.5的依赖项替换为其模块依赖项“ xmlsec-2.0.8.redhat-1”,并且签名过程将失败。为了客户的请求,我可以排除xmlsec Jboss模块,但不能使用它进行签名。因此,问题在于:如何指定给定的库版本仅在部分代码中使用?。
在这种情况下,两个依赖项的路径是相同的:org.apache.santuario,因此,我不能使用它来指定库。
我正在尝试使用提供程序进行签名,但是同样,Jboss为其xmlsec-2.0.8安全提供程序覆盖了我的xmlsec-1.5安全提供程序。存在某种实例化提供程序并将其添加到Java提供程序集中以替换Jboss的方法?
您可以使用jboss-deployment-structure.xml文件排除JBoss提供的依赖关系,您需要将其放置在战争的WEB-INF目录下。您必须指定排除依赖项,如下所示。
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="$LIBRARY_OR_MODULE_YOU_WANT_TO_EXCLUDE"/>
</exclusions>
</deployment>
例如<module name="org.apache.santuario.xmlsec"/>