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

2024-04-08

我正在努力解决我无法解决的 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]

显然,运行它的罐子里发生了一些奇怪的事情,在谷歌中我可以找到一些关于这个问题的参考,但没有明确的解决方案。

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

显然,两者之间肯定存在一些环境差异,但除了我刚才提到的方面之外,我不知道还应该在哪里寻找。

有任何想法吗?

EDIT:该项目包含两个相互冲突的 javax.servlet.servlet-api 版本。从 pom 中排除旧版本解决了问题。 不管怎样,这对我来说仍然是一个谜,为什么在一台机器上,尽管两个罐子都被加载(用 lsof 双重检查),但服务器运行得很好。也许考虑了类加载器的顺序?


块引用

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

我的项目中也抛出了这个异常。最后我找到了解决方案。由于引用不同版本的相同依赖项而引发异常。所以java代码签名搞乱了依赖关系。

  1. 添加适当的依赖项
  2. 检查依赖版本
  3. 避免同一个jar的多重依赖

javax.servlet
servlet-api 2.5
假如

只需要一个依赖项

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.lang.SecurityException 与 javax.servlet.servlet-api jar 的两个冲突版本 的相关文章

随机推荐

  • JTextField setActionCommand() 的目的是什么[如何以编程方式访问它以查找事件发生在哪个单元格?]

    原始帖子后几个月编辑 这个问题的动机是需要知道单击按钮时 11x11 网格 JTextField 数组 的哪个单元格处于活动状态 我问了错误的问题并选择了错误的工具 setActionCommand 尽管它当时通过字符串操作起作用 我最终选
  • 何时在 .NET 中使用 Array() 而不是 Generic.Lists

    在 NET 中什么时候适合使用数组而不是通用列表 T 我一直很难看到数组比通用列表提供的任何好处 但感觉我可能错过了一些东西 性能是让我印象深刻的一件事 因为它是一个潜在的瓶颈 Thanks 当您使用固定数量的给定类型的对象时 没有必要承受
  • Paypal 沙盒显示错误

    单击 继续 按钮登录后 Paypal 沙箱显示错误 Error no template specified at engine x ebay cronus software service nodes ENVaqqittlg2x28 uni
  • Java JProgressBar 使用图像

    我正在用 Java 制作一个游戏 并且我正在使用JProgressBar为了健康吧 我想使用图像 而不是颜色 JProgressBar 但我一直没能做到 我尝试过使用绘画方法 paintComponent方法 创建一个新类 但它不起作用 有
  • 将 ActionCable 发送给特定用户

    我有以下代码 它在我的 Rails 应用程序中发送 ActionCable 广播 ActionCable server broadcast notification channel notification Test message 连接如
  • 一个 Web 应用程序上具有多个域的 IIS

    我正在构建一个Web应用程序 on IIS 与 asp net 其概念如下 客户购买域名 然后从 20 30 个现成模板中选择一个模板 现在应用程序驻留在说www mywebappblabla com usersites 用户域是www m
  • 为什么要检查 if (*argv == NULL)? [复制]

    这个问题在这里已经有答案了 在我目前正在学习的数据结构课程中 我们的任务是用 C 编写一个网络爬虫 为了让我们抢占先机 教授为我们提供了一个从给定 URL 获取源代码的程序 以及一个简单的 HTML 解析器来剥离标签 该程序的 main 函
  • 使用 eulerr R 自定义欧拉图颜色

    我正在尝试使用 Johan Larsson 在 R 中的 eulerr 包绘制欧拉图 我正在关注这个例子 https cran r project org web packages eulerr index html开发人员在其中解释如何自
  • IntelliJ IDEA 中为 Tomcat 设置了哪个应用程序上下文?

    到目前为止 我在 Windows 命令中运行 Tomcat 服务器 v 7 0 26 catalina bat start脚本 如果我想部署我的 Web 应用程序 我必须通过 Maven 构建它并复制 WAR 到指定 Tomcat 部署目录
  • 检查互联网连接

    我需要我的应用程序来检查用户计算机上的互联网连接 如果有 则显示图像 如果没有 则显示不同的图像 这是我用来让它工作的代码 Private Sub Window Loaded ByVal sender As System Object By
  • HTML5 Canvas 实时绘图

    问题 我怎样才能使putImageData 随着图像各个部分的计算 实时更新画布 我正在开发一个 JavaScript TypeScript 应用程序来在 HTML5 上绘制 Mandelbrot 集
  • 使用“verticalScroll”修饰符时如何禁用水平拉伸/过度滚动?

    我想要一个可滚动视图 我正在使用verticalScroll列上的修饰符 Column modifier Modifier verticalScroll rememberScrollState I could provide more de
  • 将图像与噪声进行模板匹配的最佳方法是什么?

    我有一个大图像 5400x3600 其中有多个我需要检测的闭路电视 旋转检测需要花费大量时间 4 7 分钟 但它仍然无法解决某些闭路电视问题 匹配这样的模板的最佳方法是什么 我正在使用 skImage openCV 不适合我 但我也愿意接受
  • 使用 htaccess 屏蔽域名和文件夹名称

    我正在尝试使用 htaccess 和 mod rewrite 用另一个域屏蔽一个域及其两个子文件夹 例如 http example com sub sub sub to http example 2 com 以便http example 2
  • 将剪贴板中的代码粘贴到多个输入字段中

    我一直在寻找 Vanilla Javascript 解决方案 将代码复制粘贴到多个输入字段中 我在互联网上找到了解决方案 但都是基于 jQuery 的 这是 jQuery 解决方案 https stackoverflow com quest
  • C#中线程的合理使用?

    作为大型自动化流程的一部分 我们正在调用第三方 API 该 API 执行一些调用另一台计算机上的服务的工作 我们最近发现 当另一台计算机不可用时 API 调用在尝试连接到远程服务器时有时会中断长达 40 分钟 我们使用的 API 没有提供指
  • 带条件的数字序列[重复]

    这个问题在这里已经有答案了 我有一个大 data frame 我想生成一个新列 称为 Seq 其中有一个顺序值 每次不同列发生更改时都会重新启动 下面是 data frame 省略了列 和名为 Seq 的新列的示例 正如您所看到的 有一个连
  • Cypress:如何模拟键盘(CTRL/SHIFT)操作

    如图所示 我在树中有这些元素 如果我按键盘中的 CTRL 并单击这些文本 我可以选择多个元素 它会提供执行某些操作的链接 使用 cypress 有什么方法可以实现此目的吗 我知道如果它是选择 我可以使用选择 在我的情况下 这些只是 ul 另
  • 如何将现有的 Block Blob 转换为 PageBlob

    我使用 CloudBerry 资源管理器将 VM Iaas 磁盘文件复制到另一个存储 但是当我完成复制后 我发现新创建的Blob是一个Block Blob 而不是Page Blob 该工具不会复制源 Blob 类型 页面 Blob 有没有办
  • java.lang.SecurityException 与 javax.servlet.servlet-api jar 的两个冲突版本

    我正在努力解决我无法解决的 Java Maven Jetty 问题 我有一个正确启动的 Java Jetty 服务器 但一旦向它发送 HTTP 请求 它就会中止显示此堆栈跟踪 2013 09 30 08 40 24 534 qtp29724