開發(fā)銀聯(lián)支付功能灯谣,本地功能全部跑通,部署到測(cè)試環(huán)境報(bào)證書簽名錯(cuò)誤曲掰。 進(jìn)一步可以看到 FileInputStream
讀文件時(shí)拋出異常:
java.io.IOException: DER length more than 4 bytes: 111
一番追溯疾捍,最終 diff file 才發(fā)現(xiàn)證書文件 51offer_unionpay.pfx
服務(wù)器上與本地并不一致,竟然是 maven 打包時(shí)出的問題栏妖。
項(xiàng)目 maven 打包時(shí)用的是 maven-assembly-plugin
(留意 maven-resources-plugin
也存在類似的問題) 證書文件的打包配置如下:
<fileSet>
<directory>src/main/resources/assets</directory>
<outputDirectory>conf/META-INF/assets</outputDirectory>
<includes>
<include>**/*.*</include>
</includes>
<filtered>true</filtered>
</fileSet>
留意 <filtered>true</filtered>
這行配置乱豆。 這是 maven-assembly-plugin
從 pom 配置 properties 變量所用的配置,在證書文件這個(gè)場(chǎng)景并不需要吊趾。 maven-assembly-plugin
自作多情的過濾讀寫了證書文件宛裕,卻沒能正確處理文件自身的內(nèi)容,導(dǎo)致了這個(gè)問題趾徽。
解決也很簡(jiǎn)單:改為<filtered>false</filtered>
提交重新發(fā)布续滋,問題解決。
總結(jié)
- 調(diào)試時(shí)留意報(bào)錯(cuò)細(xì)節(jié)孵奶,問題偶爾也會(huì)發(fā)生在你完全想不到的地方疲酌。
- 配置也要力求精簡(jiǎn),不要引入無關(guān)內(nèi)容了袁,拖泥帶水只會(huì)給自己挖坑朗恳。