java.security.NoSuchProviderException:没有这样的提供者:SUN

时间:2017-09-18 12:18:20

标签: java websphere google-authenticator

我已经使用QR码实现了双因素身份验证。我已经使用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页面上发现了这个issue,这与我的问题非常相似,编写这个库的人解释了这个方法的作用:

  

库目前使用。获取SecureRandom实例   SecureRandom#getInstance方法并指定SHA1PRNG算法   和SUN提供商

我知道我必须使用SUN覆盖System.setProperty("com.warrenstrange.googleauth.rng.algorithmProvider", "property")提供商,因为系统无法找到它,但我不明白为什么会抛出异常。 在我的机器上,我使用Java 7运行应用程序,而Websphere使用相同的版本。不同之处在于在WebSphere上运行的应用程序是使用Java 6编译的。

我的问题是:

为什么抛出此异常?不是SUN提供者的Java部分吗?

我应该使用哪些其他提供商以及如何使用?

1 个答案:

答案 0 :(得分:4)

不同之处在于,SUN提供程序在某些WebSphere / Java版本中默认不可用。您可以检查java.security目录中的WebSphere/AppServer/java/jre/lib/security文件中是否存在该文件。

通过该属性指定IBMJCE作为提供者,以使用它而不是SUN