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!
来源地址:https://blog.csdn.net/yezhou1235689/article/details/130605999
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341