2017-05-05 50 views

Odpowiedz

0

To pytanie jest stary, ale jest to pierwszy google hit na pytanie, więc tu idzie:

Wynikiem rozmowy jest realizacja CertificateFactory, a konkretnie (w Oracle Java) A sun.security.provider.X509Factory. Ta fabryka ma tylko statyczne elementy instancji, które [sprawdziłem je] są chronione wątkami. Ma również kilka metod, które wskazują, że klasa została zbudowana z myślą o bezpieczeństwie wątków.

Powiedziałbym, że w praktyce, jeśli masz pewność, że używasz Oracle Java (tm), możesz założyć bezpieczeństwo wątków; należy jednak sprawdzić inne środowiska JRE, jeśli ich używasz. zawsze można po prostu być bezpieczne i zawinąć w ThreadLocal wartość, np:

private static final ThreadLocal<CertificateFactory> certFactory = 
    ThreadLocal.withInitial(() -> { 
    try { 
     return CertificateFactory.getInstance("x.509"); 
    } catch (Exception e) { 
     throw new RuntimeException(e); 
    } 
}); 

a potem

public Certificate loadCertFrom(String filename) throws IOException, CertificateException { 
    try (final FileInputStream in = new FileInputStream(filename)) { 
     return certFactory.get().generateCertificate(in); 
    } 
}