Java 签名org.bouncycastle 包冲突解决

事由起因:对接银行 用银行的签名加密出了问题,问了银行的人无解,开始漫长自救道路


1.包名冲突  
 

就是因为有2个类的路径一样,导致报这个错,org.bouncycastle.asn1.ASN1Encodable Signer information does not match signer information of other classess in the same package


全局搜这个类发现在 prov-ext-jdk15on 和 bcprov-jdk15on 都有这个类,根据双亲委派机制,这个重名了不知道用谁就报错了

解决:用maven shane-plugin 插件,给这两个有重复路径类宝进行合并打包,实验下来是会包下面的包的路径加 shaded.*** 以和另一个类进行区分,把这个包上传私服,用私服依赖

同时在项目中剔除原来这2个包的路径。同时以前用过org.bouncycastle*包下的类都要去改下路径
具体配置参考下面这个博客
https://segmentfault.com/a/1190000038382111

2.org/bouncycastle/asn1/ASN1ObjectIdentifier   java.lang.NoClassDefFoundError 

后面加密还是有问题

此方法里面报错

这个sign 方法
 


还是报错,而且运行很久(这回算是得出经验了,只要跑很久绝对包的问题,有很多的包里面的类路径重名了,特别是prov org.bouncycastle** 下的prov-jdk15,prov-ext-jdk15on 真特么恶心)。这次是这行代码出了问题,进入源码发现是这个类进入到另外一个渠道里面的引用的包去了,立马和对接方的demo 进行比对,发现不对demo里面是进入到bcmail-prov-jdk14里,随后立马引入此包,全局搜了发现其他渠道有把这个包当作三方包上(版本1.46)传到私服,为兼容以前的版本去掉私服依赖 用官方的依赖,版本靠齐之前的。就此 接着debug 还是有问题,出现了

 org/bouncycastle/asn1/ASN1ObjectIdentifier   java.lang.NoClassDefFoundError 


网上搜了一个遍, 各种查 有点苗头知道是版本号的问题,由于bcprv-jdk14 对接方告知是1.45 限制了1.45,但是根据上面的情况 bcmail 用的是1.46,于是出现了上面的noClassDefFoundError,有了预感是版本号的问题,就靠齐版本号,问题解决,都用1.45,活着都用1.46。为了以前的代码没有问题,我就是用1.46!


总结:

跟银行的人请教这个问题,得到是各种离谱的回答我也是服,版本太老不维护了,不知道能不能用高的版本,我去你妈的。不问还好 问了各种瞎鸡儿误导,
根据报错解决问题,看清楚你自己的代码问题,去想,网上有类似的 用了发现没有效果,用之前还是得考虑下是不是这个问题,别看到几个字符串匹配就去套用。

这个错网上但是不多,跟我的也不太一样,写下来为以后对接银行的开发伙伴提供助力,这种东西真的是浪费时间和精力,个人觉得对自己的提升帮助不大,想着为大家节省宝贵的时间精力,写下来给大家一个参考吧,这种东西网上有就对照着解决就行。多点时间摸鱼不香吗!

Respect!Peace!

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年12月21日
下一篇 2023年12月21日

相关推荐