我们有一个Java应用程序,其中作业计划每5分钟运行一次。在该作业中,有一个安全组件,每次执行时都会执行以下操作:
java.security.Security
.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
我的问题是:
为了澄清,我想在我的应用程序中以编程方式添加Bouncy Castle安全提供程序,而不是通过JRE静态添加。 IMO,在应用程序中添加一次Bouncy Castle安全提供程序就足够了,我不需要多次这样做。
答案 0 :(得分:10)
<强>返回:强>
添加提供程序的首选位置,如果由于已安装提供程序而未添加提供程序,则为-1
addProvider
已检查是否已安装提供程序,因此,即使您在应用程序中有多个调用,也只会添加一次。在添加之后,它将保持在那里直到JVM停止(或者如果有人调用removeProvider
)。
当然你可以优化它并在主类中放入一个单独的调用(一些你知道它总是在应用程序启动时加载的类),但我不会为此担心。
我曾经使用过在不同部分对addProvider
进行多次调用的系统(因为它们可以按任何顺序调用,彼此独立),都在同一个JVM中运行,而且从不有任何内存泄漏。当然这只是我的情况,但我不知道这会造成泄密。
如果您只想在尚未添加提供商的情况下拨打addProvider
,则可以致电Security.getProvider()
进行检查。如果提供程序不在JVM中,则返回null
:
// add provider only if it's not in the JVM
if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) {
Security.addProvider(new BouncyCastleProvider());
}