2012-10-31 36 views
6

tôi đang làm việc với một số mã từ phía sau vào năm 2003. Có một tham chiếu đến lớp sau đây:Legacy mã Java sử dụng com.sun.net.ssl.internal.ssl.Provider()

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

nó gây ra một lỗi:

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

có ai có bất cứ đề nghị cho một lựa chọn phù hợp cho việc sử dụng lớp này?

+0

Tôi không biết lớp đó, nhưng tôi có thể đọc 'ssl'. Nếu đó là Lớp cổng bảo mật, hãy xem xét [javax.net.ssl. *] (Http://docs.oracle.com/javase/7/docs/api/javax/net/ssl/package-summary.html) – ignis

+2

Có hiếm khi có bất kỳ lý do nào để khởi tạo nhà cung cấp theo cách thủ công như thế này. Mã xung quanh là gì? – Bruno

Trả lời

2

Bạn có thể biến điều này thành cảnh báo hoặc không có sự kiện trong các tùy chọn Eclipse Java->Compiler->Errors/Warnings->Deprecated and restricted API. Lưu ý, như những người khác đã nói, đây không phải là thực hành tốt nhất và nên tránh khi bạn có lựa chọn thay thế.

+1

Có, bạn có thể, nhưng bạn thường không nên, ít nhất là không phải trên toàn cầu. – sleske

+0

tại sao bỏ phiếu này xuống? nó là một cách khả thi để xử lý mã số di sản –

+0

Như một khuyến nghị chung, tôi thấy nó nguy hiểm. Như một giải pháp tạm thời nó có thể được ok. Tôi thích chỉnh sửa của bạn và loại bỏ các downvote. – sleske

6

Hầu hết thời gian, bạn không thực sự cần phải tạo hoặc giữ bản thân nhà cung cấp dịch vụ. Khi Oracle Providers documentation nói:

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

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

Bên cạnh đó, bất cứ nơi nào có một tham số quá tải cho các nhà cung cấp, nó có xu hướng mất hoặc là một chuỗi hoặc một ví dụ, nhưng chuỗi (tên) có lẽ sẽ là phổ biến hơn. (Việc chuyển một thể hiện có thể hữu ích đôi khi, ví dụ: đối với một số cấu hình PKCS # 11, nhưng nó không bình thường.)

JCA documentation about Providers sẽ hữu ích.

Nếu bạn thực sự muốn giữ một phiên bản cụ thể, bạn có thể sử dụng Security.getProvider(name). Bạn sẽ tìm thấy tên thích hợp trong tài liệu của nhà cung cấp.

3

Vứt bỏ dòng mã đó đi. Cũng vứt bỏ bất kỳ tham chiếu nào đến gói com.sun.net.ssl và các gói con của nó: sửa lỗi nhập để chúng tham chiếu đến các lớp trong javax.net.ssl.

Đây là mã JDK 1.4 trước, từ ngày JSSE là một bản tải xuống riêng biệt.