Bevor du diese Frage duplizierst, erkläre ich dir, was ich weiß, was ich andere Fragen gelesen habe, und warum das für mich nicht funktioniert.java.lang.SecurityException mit Reflektion
Mein Ziel ist es, ein Java-basiertes Spiel zu implementieren, für das ich das .jar habe. Ich füge es als externe Bibliothek in mein Eclipse-Projekt ein.
Ich erhalte den Fehler
java.lang.SecurityException: class "Client"'s signer information does not match signer information of other classes in the same package
auf der Linie
Class clazz = Client.class;
nun wie in anderen Fragen erwähnt. Der Grund für diesen Fehler ist, dass ich zwei referenzierte Bibliotheken habe, die unterschiedlich signiert wurden? (Vielleicht bedeutet, dass sie mit verschiedenen Java-Versionen kompiliert sind?).
Die einzigen zwei Bibliotheken, die ich referenziere, sind das JRE-System (mein Projekt ist auf 1.7 gebaut) und das .jar des Spiels.
Würde dieser Fehler vielleicht auftreten, wenn die .jar auf 1.6 kompiliert wurde? Soll ich mein Projekt als JRE 1.6 neu erstellen? Wie kann ich feststellen, mit welcher JRE-Version der Client kompiliert wurde?
Danke!
Edit: Ein weiterer Gedanke, den ich hatte, ist vielleicht die .jar-Datei des Spiels selbst hat Klassen, die verschiedene Signaturen haben (vielleicht um Reflexion zu stoppen). Ist das möglich?
Da mein Code und die .jar nicht aus den gleichen Quellen stammen, gibt es eine Möglichkeit, die Signatur der jar/Client.class zu ermitteln und sie nachzuahmen/zu duplizieren? – k9b
@ k9b Wenn Sie den Signaturschlüssel nicht besitzen, können Sie ihn nicht kopieren. Dies würde dem Signieren einer Jar-Datei entgegenwirken. – SubOptimal
Wenn Sie dies tun durften, können Sie private Paketklassen eines signierten Jars aufrufen und erweitern, was sich nicht wie eine sichere Sache anhört. (Aus der Perspektive des Unterzeichners.) – biziclop