Ich habe meine Klassen wie gewohnt neu kompiliert und plötzlich die folgende Fehlermeldung erhalten. Warum? Wie kann ich es reparieren?
java.lang.SecurityException: class "Chinese_English_Dictionary"'s signer information does not match signer information of other classes in the same package
at java.lang.ClassLoader.checkCerts(ClassLoader.java:776)
Ein einfacher Weg, dies zu umgehen, besteht darin, die Reihenfolge Ihrer importierten JAR-Dateien zu ändern, was über (Eclipse) möglich ist. Klicken Sie mit der rechten Maustaste auf Ihr Paket -> Erstellungspfad -> Erstellungspfad konfigurieren -> Referenzen und Bibliotheken -> Bestellen und Exportieren. Versuchen Sie, die Reihenfolge der Gläser zu ändern, die Signaturdateien enthalten.
quelle
A. Wenn Sie maven verwenden, ist eine nützliche Methode zum Debuggen von Kollisionsgläsern:
Zum Beispiel für eine Ausnahme:
wir tun:
Seine Ausgabe:
zeigt kollidierende Servlet-API 2.5 und javax.servlet 3.0.0.x.
B. Andere nützliche Hinweise (wie man die Sicherheitsausnahme debuggt und wie man Maven Deps ausschließt) finden Sie bei der Frage unter Signer-Informationen stimmen nicht überein .
quelle
In meinem Fall hatte ich die JAR-Version von BouncyCastle in meinem Bibliothekspfad dupliziert: S.
quelle
Ich hatte eine ähnliche Ausnahme:
Das Hauptproblem war, dass ich die Hamcrest-Bibliothek zweimal aufgenommen habe. Einmal mit Maven Pom-Datei. Außerdem habe ich die JUnit 4-Bibliothek (die auch eine Hamcrest-Bibliothek enthält) zum Erstellungspfad des Projekts hinzugefügt. Ich musste einfach JUnit aus dem Erstellungspfad entfernen und alles war in Ordnung.
quelle
Dies kann bei cglib-instrumentierten Proxys auftreten, da CGLIB anstelle der Unterzeichnerinformationen der Anwendungszielklasse seine eigenen Unterzeichnerinformationen verwendet.
quelle
Name: net / sf / jasperreports / engine / util / xml / JaxenXPathExecuterFactory.c lass SHA-256-Digest: q3B5wW + hLX / + lP2 + L0 / 6wRVXRHq1mISBo1dkixT6Vxc =
quelle
Wenn Sie es in Eclipse ausführen, überprüfen Sie die Gläser aller Projekte, die dem Erstellungspfad hinzugefügt wurden. oder machen Sie Control-Shift-T und suchen Sie nach mehreren Gläsern, die demselben Namespace entsprechen. Entfernen Sie dann redundante oder veraltete Gläser aus dem Erstellungspfad des Projekts.
quelle
Ich habe dieses Problem mit Eclipse und JUnit 5. Meine Lösung ist von der vorherigen Antwort von user2066936 inspiriert. Es besteht darin, die Reihenfolge der Importbibliotheken neu zu konfigurieren:
quelle
In meinem Fall war es ein Paketnamenkonflikt. Das aktuelle Projekt und die signierte referenzierte Bibliothek hatten ein Paket gemeinsam
package.foo.utils
. Ändern Sie einfach den aktuellen fehleranfälligen Paketnamen des Projekts in etwas anderes.quelle
Ein bisschen zu alter Thread, aber da ich einige Zeit damit beschäftigt war, hier ist die Lösung (hoffe, es hilft jemandem)
Mein Szenario:
Der Paketname lautet: com.abc.def. Es gibt 2 JAR-Dateien, die Klassen aus diesem Paket enthalten, z. B. jar1 und jar2, dh einige Klassen sind in jar1 und andere in jar2 vorhanden. Diese JAR-Dateien werden mit demselben Keystore, jedoch zu unterschiedlichen Zeiten im Build (dh separat) signiert. Dies scheint zu einer unterschiedlichen Signatur für die Dateien in jar1 und jar2 zu führen.
Ich habe alle Dateien in jar1 abgelegt und alle zusammen erstellt (und signiert). Das Problem verschwindet.
PS: Die Paketnamen und JAR-Dateinamen sind nur Beispiele
quelle
Wenn Sie alle Gläser von bouncycastle.org hinzugefügt haben (in meinem Fall von crypto-159.zip), entfernen Sie einfach diejenigen für die JDKs, die für Sie nicht zutreffen. Es gibt Entlassungen. Sie benötigen wahrscheinlich nur die "jdk15on" -Gläser.
quelle
Diese Frage hat lange gedauert, aber ich möchte etwas einbringen. Ich habe an einer Spring-Projektherausforderung gearbeitet und dies in Eclipse IDE entdeckt. Wenn Sie Maven oder Gradle für Spring Boot Rest-APIs verwenden, müssen Sie Junit 4 oder 5 im Erstellungspfad entfernen und Junit in Ihre Erstellungsdatei pom.xml oder Gradle aufnehmen. Ich denke, das gilt auch für die yml-Konfigurationsdatei.
quelle
Dies geschieht auch, wenn Sie eine Datei mit unterschiedlichen Namen oder von unterschiedlichen Speicherorten zweimal einfügen, insbesondere wenn es sich um zwei verschiedene Versionen derselben Datei handelt.
quelle
Ich könnte es reparieren.
Grundursache: Dies ist ein häufiges Problem bei Verwendung der Sun JAXB-Implementierung mit signierten Jars. Im Wesentlichen versucht die JAXB-Implementierung, Reflexion zu vermeiden, indem eine Klasse generiert wird, die direkt auf die Eigenschaften zugreift, ohne Reflexion zu verwenden. Leider generiert es diese neue Klasse im selben Paket wie die Klasse, auf die zugegriffen wird. Daher kommt dieser Fehler.
Lösung: Fügen Sie die folgende Systemeigenschaft hinzu, um die JAXB-Optimierungen zu deaktivieren, die nicht mit signierten Gläsern kompatibel sind: -Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize = true
Ref: https://access.redhat.com/site/solutions/42149
quelle
Basierend auf der Antwort von @Mohit Phougat können Sie versuchen, solche Annotationen neu zu ordnen, wenn Sie einen Groovy mit @ Grab-Annotationen ausführen.
quelle
Dies ist mir bei der Verwendung von JUnit passiert. + Seien Sie versichert + Hamcrest. In diesem Fall fügen Sie Junit nicht hinzu, um den Pfad zu erstellen. Wenn Sie das Maven-Projekt haben, wurde dies von mir behoben. Unten finden Sie die Datei pom.xml
quelle
Ich habe JUNIT 5 ausgeführt und auch auf das externe Glas von Hamcrest verwiesen. Hamcrest ist aber auch Teil der JUNIT 5- Bibliothek. Daher muss ich die Reihenfolge der externen Hamecrest-JAR-Datei in der JUNIT 5- Bibliothek im Erstellungspfad ändern .
quelle