Trước khi bạn đi lặp lại câu hỏi này, tôi sẽ giải thích cho bạn những gì tôi biết, những gì tôi đã đọc các câu hỏi khác, và tại sao điều này không làm việc cho tôi.java.lang.SecurityException với sự phản ánh
Mục tiêu của tôi với điều này là để thực hiện phản ánh một trò chơi dựa trên java mà tôi có .jar cho. Tôi đính kèm nó như là một thư viện bên ngoài trong dự án nhật thực của tôi.
Tôi nhận được lỗi
java.lang.SecurityException: class "Client"'s signer information does not match signer information of other classes in the same package
trên dòng
Class clazz = Client.class;
Bây giờ như đã đề cập trong câu hỏi khác. Lý do của lỗi này là tôi có hai thư viện được tham chiếu đã được ký khác nhau? (Có lẽ nghĩa là chúng được biên dịch với các phiên bản khác nhau của java?).
Chỉ có hai thư viện tôi tham chiếu là hệ thống JRE (dự án của tôi được xây dựng trên 1,7) và .jar của trò chơi.
Lỗi này có xảy ra nếu tệp .jar được biên dịch trên 1.6 không? Tôi có nên làm lại dự án của mình như sử dụng JRE 1.6 không? Làm cách nào tôi có thể cho biết phiên bản JRE mà khách hàng đã được biên dịch?
Cảm ơn!
Chỉnh sửa: Một ý nghĩ khác mà tôi có là tệp .jar của trò chơi có các lớp có chữ ký khác nhau (có lẽ để ngừng phản chiếu). Điều này có thể không?
Vì mã của tôi và .jar không phải từ cùng một nguồn là có cách nào để xác định chữ ký của jar/Client.class và bắt chước nó/sao chép nó? – k9b
@ k9b Nếu bạn không sở hữu khóa ký tên, không có cách nào để sao chép nó. Điều này sẽ chống lại việc ký kết một tệp Jar. – SubOptimal
Nếu bạn được phép thực hiện việc này, bạn có thể truy cập và mở rộng các lớp riêng tư của một lọ đã ký, điều này nghe có vẻ không an toàn. (Theo quan điểm của người ký, nghĩa là.) – biziclop