资讯专栏INFORMATION COLUMN

解决Java执行过程中抛签名异常的问题

goji / 1745人阅读

摘要:最近某工程启动中抛出了一个诡异的问题堆栈比较长主要原因是经发现是由于这个包中的众多类在多个包中均有实现比如和都有实现如果该进程加载时使用了中的又加载了中的同时和的签名不一致这样会导致以上报错在中查找类发现在多个带或者名字的包中均有实现可以通

最近某Java工程启动中抛出了一个诡异的问题, 堆栈比较长, 主要原因是:

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

经Google, 发现是由于javax.servlet这个包中的众多类, 在多个Jar包中均有实现(比如X和Y都有实现), 如果该Java进程加载时, 使用了X.jar中的javax.servlet.A, 又加载了Y.jar中的javax.servlet.B, 同时X.jar和Y.jar的签名不一致, 这样会导致以上报错.

在IDE中查找类javax.servlet.AsyncListener, 发现在多个带javaee或者servlet名字的jar包中均有实现, 可以通过以下命令获取工程的所有依赖:

mvn dependency:tree

为了定位是哪个Jar包导致的该问题, 我们在实现了这个类的Jar包中, 进行签名检查:

jarsigner -verify xxx.jar

通过这个命令可以看到该Jar是否有签名.

最后发现, 这些Jar包中, 只有一个有签名, 而其他都没有:

org.eclipse.jetty.orbit:javax.servlet:jar:3.0.0.v201112011016:compile

所以可以推断应该是这个eclipse对servlet的实现的Jar包使用了签名, 导致和其他相关Jar包不兼容. (是有多喜欢造轮子)

而这个Jar包, 通过依赖树, 我们发现是hive-jdbc 2.3.2依赖引入的(看着hive依赖真混乱..., 记得hbase也是), 通过升级到 3.1.0, 再次检查依赖, 我们发现这个Jar包已经不在依赖树中了. 而启动错误也消失了.

或者还有另外一个方法, 把这个有问题的包从hive-jdbc 2.3.2 中exlucde掉, 让hive使用其他包中的javax.servlet实现. 其实即便没有其他包有javax.servlet的实现, 或者其scope为provided, 只要这个工程在tomcat中启动, 都是可以的. 因为tomcat自带servlet-api实现.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71969.html

相关文章

  • java异常处理

    摘要:异常处理机制异常与异常类的继承体系在程序中,当程序出现意外情况时,系统会自动生成一个来通知程序,从异常发生出逐渐向外传播,如果没有人来处理该异常,就会交给来处理,对异常的处理方法是,打印异常跟踪栈信息,并中止程序的执行。 1 为什么要处理异常? 异常机制可以使程序的异常处理代码与正常业务代码分离,保证程序代码的健壮性。在设计程序的时候,好的程序需要尽可能处理已知的可能产生的错误,但是事...

    LuDongWei 评论0 收藏0
  • 两个月Java实习结束,继续努力

    摘要:花了将近两个星期完成了功能,期间我编写的能力也算是有所提升了。所以能看到这篇文章的同学都是大佬如果想看更多的原创技术文章,欢迎大家关注我的微信公众号。可能感兴趣的链接文章的目录导航微信公众号端文章的目录导航端海量精美脑图 前言 只有光头才能变强 2018年8月30日,今天我辞职了。在6月25号入职,到现在也有两个月时间了。 感受: 第一天是期待的:第一次将项目拉到本地上看的时候,代码...

    snifes 评论0 收藏0
  • #Java异常处理

    摘要:例子二以下开始用异常处理机制捕获该异常在这里,这个其实就是这里用到了程序运行时的多态思想。语句就像一个调用函数,当程序运行中抛出了一个异常对象,就会调用对应的来处理。 传统的语言如何处理 在一些传统的语言(如C语言中) if语句来判断是否出现了例外 全程变量ErrNo 但这有几个缺点 正常处理与异常处理的代码同样处理 可读性(readability)差 每次调用一个方法时都进行错...

    nidaye 评论0 收藏0
  • Java异常处理

    摘要:可以被异常处理机制使用,是异常处理的核心。非检测异常,在编译时,不会提示和发现异常的存在,不强制要求程序员处理这样的异常。总体来说,语言的异常处理流程,从程序中获取异常信息。处理运行时异常,采用逻辑合理规避同时辅助处理。 目录 什么是Java异常? 当一个Exception在程序中发生的时候,JVM是怎么做的呢? 当我们编写程序的时候如何对待可能出现的异常呢? 正文 1. 什么是J...

    Fourierr 评论0 收藏0
  • Java 异常处理 9 个最佳实践

    摘要:异常处理的个最佳实践原文地址翻译出处在中,异常处理是个很麻烦的事情。使用描述性消息抛出异常这个最佳实践背后的想法与前两个类似。当你以错误的格式提供时,它将被类的构造函数抛出。类提供了特殊的构造函数方法,它接受一个作为参数。 Java 异常处理的 9 个最佳实践 原文地址:https://dzone.com/articles/9-...翻译出处:https://www.oschina.n...

    sihai 评论0 收藏0

发表评论

0条评论

goji

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<