2017-05-05 27 views

cevap

0

Bu soru eski ama, işte soru için vurmak ilk google var gider: aramanızın

sonuç (Oracle Java) özellikle bir sun.security.provider.X509Factory bir CertificateFactory uygulamasıdır. Bu fabrikada yalnızca [onları kontrol ettim] iş parçacığı olan statik örnek üyeleri var. Ayrıca sınıfın iş parçacığı güvenliği göz önünde bulundurulduğunu gösteren synchronized static yöntemlerinin bir numarası vardır.

Bu yüzden pratikte, eğer Oracle Java (tm) kullandığınızdan emin olduğunuz takdirde iplik güvenliğini üstlenebileceğinizi söyleyebilirim; Ancak, bunları kullanıyorsanız diğer JRE'leri kontrol etmeniz gerekir. Sonra

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

ve üstü

public Certificate loadCertFrom(String filename) throws IOException, CertificateException { 
    try (final FileInputStream in = new FileInputStream(filename)) { 
     return certFactory.get().generateCertificate(in); 
    } 
} 
: Her zamanda örneğin güvenli olması ve ThreadLocal değeri sarabilirdiniz
İlgili konular