8

我正在使用 2003 年的一些代码。有对以下类的引用:

new com.sun.net.ssl.internal.ssl.Provider()

它导致错误:

Access restriction: The type Provider is not accessible due to restriction on required library /Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/jre/lib/jsse.jar

有人对使用此类的合适替代方案有任何建议吗?

4

3 回答 3

8

大多数时候,您实际上不需要自己创建或获取提供程序实例。正如Oracle Providers 文档所说:

通用应用程序不应向特定提供者请求加密服务。那是:

getInstance("...", "SunJCE");  // not recommended
    vs.
getInstance("...");            // recommended

此外,只要有提供程序的重载参数,它往往采用字符串或实例,但字符串(名称)可能更常见。(有时传递实例可能很有用,例如对于某些 PKCS#11 配置,但它不常见。)

关于 Providers的JCA 文档应该很有用。

如果你真的想获得一个特定的实例,你可以使用Security.getProvider(name). 您将在提供程序文档中找到适当的名称。

于 2012-10-31T15:18:33.917 回答
8

把那行代码扔掉。还要丢弃对com.sun.net.ssl包及其子包的任何引用:修复导入,以便它们引用javax.net.ssl.

这是 JDK 1.4 之前的代码,从 JSSE 单独下载的日子开始。

于 2012-11-01T22:59:15.077 回答
1

您可以在 Eclipse 首选项中将此变为警告或非事件Java->Compiler->Errors/Warnings->Deprecated and restricted API。请注意,正如其他人所说,这不是最佳做法,当您有其他选择时应该避免。

于 2012-10-31T15:05:28.590 回答