Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.SecurityException与javax.servlet.servlet-api jars的两个冲突版本_Java_Maven_Jetty - Fatal编程技术网

java.lang.SecurityException与javax.servlet.servlet-api jars的两个冲突版本

java.lang.SecurityException与javax.servlet.servlet-api jars的两个冲突版本,java,maven,jetty,Java,Maven,Jetty,我正在努力解决一个我无法解决的Java/Maven/Jetty问题。 我有一个Java Jetty服务器,它可以正确启动,但一旦向它发送HTTP请求,它就会中止,并显示以下堆栈跟踪: 2013-09-30 08:40:24,534 [qtp297240915-11 Selector0] WARN org.eclipse.jetty.io.nio - java.lang.SecurityException: class "javax.servlet.AsyncContext"'s signer

我正在努力解决一个我无法解决的Java/Maven/Jetty问题。 我有一个Java Jetty服务器,它可以正确启动,但一旦向它发送HTTP请求,它就会中止,并显示以下堆栈跟踪:

2013-09-30 08:40:24,534 [qtp297240915-11 Selector0] WARN  org.eclipse.jetty.io.nio - java.lang.SecurityException: class "javax.servlet.AsyncContext"'s signer information does not match signer information of other classes in the same package
at java.lang.ClassLoader.checkCerts(ClassLoader.java:806) ~[na:1.6.0_37]
at java.lang.ClassLoader.preDefineClass(ClassLoader.java:487) ~[na:1.6.0_37]
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:625) ~[na:1.6.0_37]
at java.lang.ClassLoader.defineClass(ClassLoader.java:615) ~[na:1.6.0_37]
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) ~[na:1.6.0_37]
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) ~[na:1.6.0_37]
at java.net.URLClassLoader.access$000(URLClassLoader.java:58) ~[na:1.6.0_37]
at java.net.URLClassLoader$1.run(URLClassLoader.java:197) ~[na:1.6.0_37]
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.6.0_37]
at java.net.URLClassLoader.findClass(URLClassLoader.java:190) ~[na:1.6.0_37]
at java.lang.ClassLoader.loadClass(ClassLoader.java:306) ~[na:1.6.0_37]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) ~[na:1.6.0_37]
at java.lang.ClassLoader.loadClass(ClassLoader.java:247) ~[na:1.6.0_37]
at org.eclipse.jetty.server.AbstractHttpConnection.<init>(AbstractHttpConnection.java:157) ~[jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.server.AsyncHttpConnection.<init>(AsyncHttpConnection.java:50) ~[jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.server.nio.SelectChannelConnector.newConnection(SelectChannelConnector.java:285) ~[jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.server.nio.SelectChannelConnector$ConnectorSelectorManager.newConnection(SelectChannelConnector.java:325) ~[jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.server.nio.SelectChannelConnector.newEndPoint(SelectChannelConnector.java:272) ~[jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.server.nio.SelectChannelConnector$ConnectorSelectorManager.newEndPoint(SelectChannelConnector.java:331) ~[jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.io.nio.SelectorManager$SelectSet.createEndPoint(SelectorManager.java:836) ~[jetty-io-7.6.5.v20120716.jar:7.6.5.v20120716]
at org.eclipse.jetty.io.nio.SelectorManager$SelectSet.doSelect(SelectorManager.java:491) ~[jetty-io-7.6.5.v20120716.jar:7.6.5.v20120716]
at org.eclipse.jetty.io.nio.SelectorManager$1.run(SelectorManager.java:285) [jetty-io-7.6.5.v20120716.jar:7.6.5.v20120716]
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:603) [jetty-util-8.1.3.v20120416.jar:8.1.3.v20120416]
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:538) [jetty-util-8.1.3.v20120416.jar:8.1.3.v20120416]
at java.lang.Thread.run(Thread.java:662) [na:1.6.0_37]
2013-09-30 08:40:24534[qtp297240915-11选择器0]警告org.eclipse.jetty.io.nio-java.lang.SecurityException:类“javax.servlet.AsyncContext”的签名者信息与同一包中其他类的签名者信息不匹配
在java.lang.ClassLoader.checkCerts(ClassLoader.java:806)~[na:1.6.0\u37]
在java.lang.ClassLoader.preDefineClass(ClassLoader.java:487)~[na:1.6.0\u37]
在java.lang.ClassLoader.defineclassecond(ClassLoader.java:625)~[na:1.6.0\u37]
在java.lang.ClassLoader.defineClass(ClassLoader.java:615)~[na:1.6.0\u37]
在java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)~[na:1.6.037]
在java.net.URLClassLoader.defineClass(URLClassLoader.java:283)~[na:1.6.0\u37]
在java.net.URLClassLoader.access$000(URLClassLoader.java:58)~[na:1.6.0\u37]
在java.net.URLClassLoader$1.run(URLClassLoader.java:197)~[na:1.6.0\u37]
在java.security.AccessController.doPrivileged(本机方法)~[na:1.6.0_37]
在java.net.URLClassLoader.findClass(URLClassLoader.java:190)~[na:1.6.0\u37]
在java.lang.ClassLoader.loadClass(ClassLoader.java:306)~[na:1.6.0\u37]
在sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)~[na:1.6.0\u37]
在java.lang.ClassLoader.loadClass(ClassLoader.java:247)~[na:1.6.0_37]
在org.eclipse.jetty.server.AbstractHttpConnection.(AbstractHttpConnection.java:157)~[jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
在org.eclipse.jetty.server.AsyncHttpConnection.(AsyncHttpConnection.java:50)~[jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
在org.eclipse.jetty.server.nio.SelectChannelConnector.newConnection(SelectChannelConnector.java:285)~[jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
在org.eclipse.jetty.server.nio.SelectChannelConnector$ConnectorSelectorManager.newConnection(SelectChannelConnector.java:325)~[jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
在org.eclipse.jetty.server.nio.SelectChannelConnector.newEndPoint(SelectChannelConnector.java:272)~[jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
在org.eclipse.jetty.server.nio.SelectChannelConnector$ConnectorSelectorManager.newEndPoint(SelectChannelConnector.java:331)~[jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
在org.eclipse.jetty.io.nio.SelectorManager$SelectSet.createEndPoint(SelectorManager.java:836)~[jetty-io-7.6.5.v20120716.jar:7.6.5.v20120716]
在org.eclipse.jetty.io.nio.SelectorManager$SelectSet.doSelect(SelectorManager.java:491)~[jetty-io-7.6.5.v20120716.jar:7.6.5.v20120716]
在org.eclipse.jetty.io.nio.SelectorManager$1.run(SelectorManager.java:285)[jetty-io-7.6.5.v20120716.jar:7.6.5.v20120716]
位于org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:603)[jetty-util-8.1.3.v2020416.jar:8.1.3.v2020416]
在org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:538)[jetty-util-8.1.3.v2020416.jar:8.1.3.v2020416]
在java.lang.Thread.run(Thread.java:662)[na:1.6.0_37]
显然,运行它所包含的jar中有一些奇怪的东西,在谷歌中,我可以找到一些关于这个问题的参考资料,但没有一个明确的解决方案

无论如何,最奇怪的是,同一个应用程序在另一台机器上完美运行。为了确保两者之间没有区别,我将项目目录(包括编译类、maven依赖项JAR、配置文件等)从运行正常的机器复制到运行不正常的机器。错误不断出现。 我还删除了机器的maven本地缓存(~/.m2/),尽管这不重要。Java和Maven版本在这两台机器中是相同的

很明显,两者之间的环境一定有一些不同,但我不知道除了我刚才提到的方面之外,我还应该去哪里寻找

有什么想法吗

编辑:该项目包含两个相互冲突的javax.servlet.servlet-api版本。从pom中排除旧版本修复了该问题。
无论哪种方式,对我来说都是一个谜,为什么在一台机器中,尽管两个jar都已加载(使用lsof进行了双重检查),但服务器运行正常。可能考虑了类装入器的顺序?

您不需要排除它;对于将部署在容器中的项目,任何对
servlet api
的引用都应该使用
提供的
,以确保在运行时只存在容器的版本()。

Blockquote

java.lang.SecurityException:类“javax.servlet.AsyncContext”的签名者信息与同一包中其他类的签名者信息不匹配

这个异常也在我的项目中抛出。最后我找到了解决办法。由于引用具有不同版本的相同依赖项而引发异常。因此java代码签名会弄乱依赖关系

  • 添加适当的依赖项
  • 检查依赖项版本
  • 避免同一jar的多个依赖项
  • javax.servlet
    servlet api 2.5
    提供


    只需要一个依赖项

    一些想法:系统时间正确吗?也许(系统)类路径会加载其他jar?我已经手动指定了类路径,并且还逐个检查了哪些jar是用lsof打开的。为什么系统时间会影响这一点?如果我记得很清楚的话,我在系统时间方面遇到了关于签名代码(证书,
    java.lang.ClassLoader.checkCerts
    )的问题。但这只是一个猜测。