Java SecurityException: signer information does not match

后端 未结 18 2702
迷失自我
迷失自我 2020-11-22 12:56

I recompiled my classes as usual, and suddenly got the following error message. Why? How can I fix it?

java.lang.SecurityException: class \"Chinese_English_D         


        
相关标签:
18条回答
  • 2020-11-22 13:52

    This happens when classes belonging to the same package are loaded from different JAR files, and those JAR files have signatures signed with different certificates - or, perhaps more often, at least one is signed and one or more others are not (which includes classes loaded from directories since those AFAIK cannot be signed).

    So either make sure all JARs (or at least those which contain classes from the same packages) are signed using the same certificate, or remove the signatures from the manifest of JAR files with overlapping packages.

    0 讨论(0)
  • 2020-11-22 13:56

    A bit too old thread but since I was stuck for quite some time on this, here's the fix (hope it helps someone)

    My scenario:

    The package name is : com.abc.def. There are 2 jar files which contain classes from this package say jar1 and jar2 i.e. some classes are present in jar1 and others in jar2. These jar files are signed using the same keystore but at different times in the build (i.e. separately). That seems to result into different signature for the files in jar1 and jar2.

    I put all the files in jar1 and built (and signed) them all together. The problem goes away.

    PS: The package names and jar file names are only examples

    0 讨论(0)
  • 2020-11-22 13:57

    A. If you use maven, an useful way to debug clashing jars is:

    mvn dependency:tree
    

    For example, for an exception:

    java.lang.SecurityException: class "javax.servlet.HttpConstraintElement"'s signer information does not match signer information of other classes in the same package
    

    we do:

    mvn dependency:tree|grep servlet
    

    Its output:

    [INFO] +- javax.servlet:servlet-api:jar:2.5:compile
    [INFO] +- javax.servlet:jstl:jar:1.2:compile
    [INFO] |  +- org.eclipse.jetty.orbit:javax.servlet.jsp:jar:2.2.0.v201112011158:compile
    [INFO] |  +- org.eclipse.jetty.orbit:javax.servlet.jsp.jstl:jar:1.2.0.v201105211821:compile
    [INFO] |  +- org.eclipse.jetty.orbit:javax.servlet:jar:3.0.0.v201112011016:compile
    [INFO] +- org.eclipse.jetty:jetty-servlet:jar:9.0.0.RC2:compile
    

    shows clashing servlet-api 2.5 and javax.servlet 3.0.0.x.

    B. Other useful hints (how to debug the security exception and how to exclude maven deps) are at the question at Signer information does not match.

    0 讨论(0)
  • 2020-11-22 13:57

    This also happens if you include one file with different names or from different locations twice, especially if these are two different versions of the same file.

    0 讨论(0)
  • 2020-11-22 13:58

    I am having this problem with Eclipse and JUnit 5. My solution is inspired by the previous answer by user2066936 It is to reconfig the ordering of the import libraries:

    1. Right click the project.
    2. Open [Java Build Path].
    3. Click Order and Export.
    4. Then push JUNIT to upper priority.
    0 讨论(0)
  • 2020-11-22 14:02

    A simple way around it is just try changing the order of your imported jar files which can be done from (Eclipse). Right click on your package -> Build Path -> Configure build path -> References and Libraries -> Order and Export. Try changing the order of jars which contain signature files.

    0 讨论(0)
提交回复
热议问题