2012-10-31 20 views
6

pracuję z jakimś kodem z powrotem w roku 2003. Jest to odniesienie do następujących klas:kod Legacy Java wykorzystanie com.sun.net.ssl.internal.ssl.Provider()

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

to powoduje błąd:

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

Czy ktoś ma jakieś sugestie na odpowiednią alternatywą dla korzystania z tej klasy?

+0

Nie znam tej klasy, ale mogę przeczytać "ssl". Jeśli to jest Secure Socket Layer, rozważ [javax.net.ssl. *] (Http://docs.oracle.com/javase/7/docs/api/javax/net/ssl/package-summary.html) – ignis

+2

There's rzadko istnieje powód do ręcznego utworzenia dostawcy w ten sposób. Jaki jest kod? – Bruno

Odpowiedz

2

Możesz zmienić to w ostrzeżenie lub nie zdarzenie w preferencjach Eclipse Java->Compiler->Errors/Warnings->Deprecated and restricted API. Uwaga, jak powiedzieli inni, nie jest to najlepsza praktyka i należy tego unikać, gdy masz alternatywę.

+1

Tak, możesz, ale generalnie nie powinieneś, przynajmniej nie globalnie. – sleske

+0

dlaczego głosować to w dół? jest to opłacalny sposób postępowania ze starszym kodem –

+0

Jako ogólną rekomendację uważam to za niebezpieczne. Jako tymczasowe rozwiązanie może być w porządku. Podoba mi się twoja edycja i usunęłam notatkę. – sleske

6

Przez większość czasu nie trzeba samemu tworzyć ani zdobywać instancji dostawcy. Jak Oracle Providers documentation mówi:

General purpose applications SHOULD NOT request cryptographic services from specific providers. That is:

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

Ponadto, wszędzie tam, gdzie jest przeciążony parametr dla operatora, to ma tendencję do podjęcia albo łańcuch lub wystąpienie, ale string (nazwa) będzie prawdopodobnie bardziej powszechne. (Przekazywanie instancji może być czasem przydatne, np. Dla niektórych konfiguracji PKCS # 11, ale jest to nietypowe.)

Przydatny powinien być numer JCA documentation about Providers.

Jeśli naprawdę chcesz zdobyć konkretną instancję, możesz użyć Security.getProvider(name). Znajdziesz odpowiednie nazwy w dokumentacji dostawców.

3

Wyrzuć ten wiersz kodu. Odrzuć również wszelkie odniesienia do pakietu com.sun.net.ssl i jego podpakietów: napraw importowanie, tak aby odnosiły się do klas w

To jest kod JDK przed wersją 1.4, od czasów, w których JSSE było osobnym plikiem do pobrania.