在 Java 应用程序中多次添加安全提供程序
Adding Security Provider multiple times in Java application
我们有一个 Java 应用程序,其中每 5 分钟安排一个作业 运行。在该作业中,有一个安全组件在每次执行时执行以下操作:
java.security.Security
.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
我的问题是:
- 是否需要在应用中多次添加安全提供者?它有什么用吗?对我来说,这没有意义,添加一次就足够了。
- 它是否是应用程序中潜在内存泄漏的候选对象?
澄清一下,我想在我的应用程序中以编程方式添加 Bouncy Castle 安全提供程序,而不是通过 JRE 静态添加。 IMO,在应用程序中添加一次 Bouncy Castle 安全提供程序就足够了,我不需要多次这样做。
Returns:
the preference position in which the provider was added, or -1 if the provider was not added because it is already installed
addProvider
已经检查提供程序是否已安装,因此,即使您在应用程序中有多个调用,也只会添加一次。添加后,它将保留在那里直到 JVM 停止(或者如果有人调用 removeProvider
)。
当然你可以优化它并在主 class 中只调用一次(有些 class 你知道它总是在应用程序启动时加载),但我不会太担心关于那个。
我曾经使用过在不同部分调用多个 addProvider
的系统(因为它们可以以任何顺序调用并且彼此独立),所有 运行 在相同的 JVM,它从未发生任何内存泄漏。当然这只是我的情况,但我不知道这会导致泄漏。
如果您只想在提供商尚未添加时调用 addProvider
,您可以调用 Security.getProvider()
进行检查。如果提供者不在 JVM 中,它 returns null
:
// add provider only if it's not in the JVM
if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) {
Security.addProvider(new BouncyCastleProvider());
}
我们有一个 Java 应用程序,其中每 5 分钟安排一个作业 运行。在该作业中,有一个安全组件在每次执行时执行以下操作:
java.security.Security
.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
我的问题是:
- 是否需要在应用中多次添加安全提供者?它有什么用吗?对我来说,这没有意义,添加一次就足够了。
- 它是否是应用程序中潜在内存泄漏的候选对象?
澄清一下,我想在我的应用程序中以编程方式添加 Bouncy Castle 安全提供程序,而不是通过 JRE 静态添加。 IMO,在应用程序中添加一次 Bouncy Castle 安全提供程序就足够了,我不需要多次这样做。
Returns:
the preference position in which the provider was added, or -1 if the provider was not added because it is already installed
addProvider
已经检查提供程序是否已安装,因此,即使您在应用程序中有多个调用,也只会添加一次。添加后,它将保留在那里直到 JVM 停止(或者如果有人调用 removeProvider
)。
当然你可以优化它并在主 class 中只调用一次(有些 class 你知道它总是在应用程序启动时加载),但我不会太担心关于那个。
我曾经使用过在不同部分调用多个 addProvider
的系统(因为它们可以以任何顺序调用并且彼此独立),所有 运行 在相同的 JVM,它从未发生任何内存泄漏。当然这只是我的情况,但我不知道这会导致泄漏。
如果您只想在提供商尚未添加时调用 addProvider
,您可以调用 Security.getProvider()
进行检查。如果提供者不在 JVM 中,它 returns null
:
// add provider only if it's not in the JVM
if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) {
Security.addProvider(new BouncyCastleProvider());
}