我已经使用二维码实现了两因素身份验证。我已经使用GoogleAuth库完成了它。在我的本地环境中工作就像一个魅力,但是当我在 WebSphere 8.5.5 上部署应用程序时,它会抛出这个错误:
java.security.NoSuchProviderException: no such provider: SUN
并GoogleAuth
抛出这个异常:
Could not initialise SecureRandom with the specified provider: SUN.
Another provider can be chosen setting the com.warrenstrange.googleauth.rng.algorithmProvider system property
在这个方法上:
private String getRandomNumberAlgorithm()
{
return System.getProperty(RNG_ALGORITHM, DEFAULT_RANDOM_NUMBER_ALGORITHM);
}
我在项目的 GitHub 页面上发现了这个问题,这与我的问题非常相似,在这里编写这个库的人解释了这个方法的作用:
该库当前使用 SecureRandom#getInstance 方法并指定 SHA1PRNG 算法和 SUN 提供程序获取 SecureRandom 实例
我知道我必须SUN
使用另一个覆盖提供程序System.setProperty("com.warrenstrange.googleauth.rng.algorithmProvider", "property")
,因为系统找不到它,但我不明白为什么会抛出异常。在我的机器上,我使用 Java 7 运行应用程序,而 Websphere 使用相同的版本。不同之处在于运行在 WebSphere 上的应用程序是用 Java 6 编译的。
我的问题是:
为什么抛出这个异常?提供者不是SUN
Java 的一部分吗?
我应该使用哪些其他提供商以及如何使用?