当我尝试实例化依赖于充气城堡 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 欢呼!