当代码的另一部分正在调用SSLContext.getInstance()时,我们正在收到SSL握手异常。有人可以确认或拒绝使用相同的提供程序在同一JVM中运行多个并发SSLContex的能力吗?方法名称getInstance意味着单例。
答案 0 :(得分:4)
是的,您可以拥有多个SSLContext
个实例,如果您愿意,可以进行不同的配置。
getInstance(...)
通常是 factory 模式的一部分,而不是 singleton 模式,尽管单例模式的许多实现也使用工厂模式访问这个单身人士。
此外,SSLContext.getInstance()
不存在,只有getInstance(String)
,getInstance(String,String)
或getInstance(String,Provider)
(对getInstance
方法有争议几乎没有意义单身人士)。
(不要将此与SSLContext.getDefault()
混淆,后者将始终返回当前的默认实例,尽管也可以使用setDefault(SSLContext)
进行全局更改。)
如果您正在讨论SSLContext.getDefault()
,则值得注意的是默认SSLContext
只会在第一次加载时读取并使用javax.net.ssl.*
系统属性。如果您在代码中的某个位置设置这些属性,但在其他地方(或不同地)设置这些属性并以不同的顺序调用SSLContext.getDefault()
,则可能会产生影响:第一次调用SSLContext.getDefault()
获胜(假设您不是通过进一步调用SSLContext.setDefault(...)
)使其复杂化。