【问题标题】:Java Security Exception for Java ASTJava AST 的 Java 安全异常
【发布时间】:2012-05-11 05:17:09
【问题描述】:

我在办公室使用 eclipse 32bit 并开发了一个 java 代码来解析 JavaAST,但是当我尝试在家里运行该程序时,我得到了这个异常。 我还提供了发生异常的位置。

我该如何解决这个异常?

异常行

ASTParser parser = ASTParser.newParser(AST.JLS3);

安全异常

Exception in thread "main" java.lang.SecurityException: class "org.eclipse.core.runtime.Plugin"'s signer information does not match signer information of other classes in the same package
    at java.lang.ClassLoader.checkCerts(ClassLoader.java:943)
    at java.lang.ClassLoader.preDefineClass(ClassLoader.java:657)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:785)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    at org.eclipse.jdt.core.dom.ASTParser.initializeDefaults(ASTParser.java:235)
    at org.eclipse.jdt.core.dom.ASTParser.<init>(ASTParser.java:218)
    at org.eclipse.jdt.core.dom.ASTParser.newParser(ASTParser.java:118)
    at tester.runTest.main(runTest.java:33)

【问题讨论】:

  • 您是在家重新编译类还是直接放入二进制 .class 文件?
  • 另外,检查this(可能重复)-在我自己回答后立即找到(证明我的回答可能是正确的,尽管我认为其他原因也可能)

标签: java exception abstract-syntax-tree securityexception


【解决方案1】:

请参阅 Java 文档中的此页面:Sealing Packages within a JAR File。这可能是您看到的错误的原因。

简而言之,当一个 jar 文件被密封时,JVM 假定该 jar 包中的 每个 类都必须在该 jar 中定义。如果你的项目的其他部分有一些代码属于同一个包,它会将is视为安全异常。

检查您在家里运行的代码的结构是否与您在办公室运行的代码相似。您可能在常规 .java 文件中定义了一些类,这些类可从您的 CLASSPATH 访问,属于该 jar 文件中定义的相同包。尝试从您的项目中删除任何不必要的依赖项(使其看起来尽可能接近您的工作环境),看看是否能解决您的问题。

编辑:我可能将 signed 误认为 sealed;那么,相关文档是Signing and Verifying JAR Files。可能的原因和可能的解决方案保持不变,但...

【讨论】:

  • 谢谢它是重复的。我有两个相同内容的罐子。
  • 无论如何这是非常有用的信息。谢谢。但是现在我想知道为什么我的办公系统没有这个问题,尽管它有相同的依赖库。
【解决方案2】:

此错误是由于两次添加 jar 造成的。如果您添加多个共享某些类的 jar,它将以您现在看到的错误结束。

我建议您尝试删除并发 jar,然后测试您的代码。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 2019-01-29
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多