充气城堡 类路径中的 JCA 提供程序版本被 Java 忽略



当我尝试实例化依赖于充气城堡 1.46 的密钥库时,我的 Spring 引导应用程序出现错误的密钥库版本错误。 我在pom上添加了正确的1.46版本.xml甚至在我的类路径上,但是当我执行spring-boot应用程序时,运行时对Bouncy Castle提供程序的版本检查指示版本1.51。

如何确保弹簧启动应用程序运行我的pom.xml上定义的充气城堡1.46。

<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.46</version>
</dependency>

private void installJCAProvider() {
BouncyCastleProvider bouncyCastleProvider = new BouncyCastleProvider();
System.err.println("Bouncy Catle Provider Version " + bouncyCastleProvider.getVersion() + " nName " + bouncyCastleProvider.getName() + " | n" + bouncyCastleProvider.getInfo());

Security.addProvider(bouncyCastleProvider);
Provider[] providers = Security.getProviders();
for (Provider provider : providers) {
System.err.println("Installed security providers" + 
provider.getInfo() + "n");
}
}

原木

Bouncy Castle Provider Version 1.51 
Name SC | 
BouncyCastle Security Provider v1.51

运行mvn dependency:tree以查看版本1.51的来源并将其从依赖项中排除。

此外,spring-boot 在其定义依赖项版本的POMs中声明了一组属性。因此,使用Bouncy Castle lib查找弹簧启动器的POM作为属性定义版本,并在POM中重新定义其值。

根据这个 https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html 您可以尝试欺骗 Maven,将您的依赖项声明放在依赖项列表中的 spring-boot 启动器上方。

@Danila的回答有很大帮助,但是,也按照Oracle提供的说明将Bouncy Castle版本1.46{或您喜欢的版本}添加到CSP列表中 - $JAVA_HOME中的加密服务提供商 https://docs.oracle.com/cd/E19830-01/819-4712/ablsc/index.html 欢呼!

最新更新